blob: 966366568e23202b7c94da15562c62f794fe00c7 [file] [log] [blame]
Ted Kremenekcdc3a892012-08-24 20:39:55 +00001// RUN: %clang_cc1 -analyze -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-opt-analyze-nested-blocks -analyzer-checker=alpha.deadcode.IdempotentOperations -verify %s
Tom Careef52bcb2010-08-24 21:09:07 +00002
3// C++ specific false positives
4
5extern void test(int i);
6extern void test_ref(int &i);
7
8// Test references affecting pseudoconstants
9void false1() {
10 int a = 0;
11 int five = 5;
12 int &b = a;
13 test(five * a); // expected-warning {{The right operand to '*' is always 0}}
14 b = 4;
15}
Ted Kremenek422ab7a2011-04-02 02:56:23 +000016
17// Test not flagging idempotent operations because we aborted the analysis
18// of a path because of an unsupported construct.
19struct RDar9219143_Foo {
20 ~RDar9219143_Foo();
21 operator bool() const;
22};
23
24RDar9219143_Foo foo();
25unsigned RDar9219143_bar();
26void RDar9219143_test() {
27 unsigned i, e;
28 for (i = 0, e = RDar9219143_bar(); i != e; ++i)
29 if (foo())
30 break;
31 if (i == e) // no-warning
32 return;
33}
34