1// RUN: %clang_cc1 -analyze -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-opt-analyze-nested-blocks -analyzer-checker=alpha.deadcode.IdempotentOperations -verify %s 2 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} 16 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 35