| // RUN: %clang_cc1 -analyze -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-opt-analyze-nested-blocks -analyzer-checker=deadcode.IdempotentOperations -verify %s | 
 |  | 
 | // C++ specific false positives | 
 |  | 
 | extern void test(int i); | 
 | extern void test_ref(int &i); | 
 |  | 
 | // Test references affecting pseudoconstants | 
 | void false1() { | 
 |   int a = 0; | 
 |   int five = 5; | 
 |   int &b = a; | 
 |    test(five * a); // expected-warning {{The right operand to '*' is always 0}} | 
 |    b = 4; | 
 | } | 
 |  | 
 | // Test not flagging idempotent operations because we aborted the analysis | 
 | // of a path because of an unsupported construct. | 
 | struct RDar9219143_Foo { | 
 |   ~RDar9219143_Foo(); | 
 |   operator bool() const; | 
 | }; | 
 |  | 
 | RDar9219143_Foo foo(); | 
 | unsigned RDar9219143_bar(); | 
 | void RDar9219143_test() { | 
 |   unsigned i, e; | 
 |   for (i = 0, e = RDar9219143_bar(); i != e; ++i) | 
 |     if (foo()) | 
 |       break;   | 
 |   if (i == e) // no-warning | 
 |     return; | 
 | } | 
 |  |