uninit-variables-conditional.cpp revision c5e43c19ddb40b8a1371291f73ae66fe54951ca5
1c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek// RUN: %clang_cc1 -fsyntax-only -Wconditional-uninitialized -fsyntax-only %s -verify 2c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek 3c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenekclass Foo { 4c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenekpublic: 5c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek Foo(); 6c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek ~Foo(); 7c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek operator bool(); 8c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek}; 9c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek 10c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenekint bar(); 11c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenekint baz(); 12c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenekint init(double *); 13c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek 14c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek// This case flags a false positive under -Wconditional-uninitialized because 15c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek// the destructor in Foo fouls about the minor bit of path-sensitivity in 16c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek// -Wuninitialized. 17c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenekdouble test() { 18c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek double x; // expected-note {{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}} 19c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek if (bar() || baz() || Foo() || init(&x)) { 20c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek return x; // expected-warning {{variable 'x' is possibly uninitialized when used here}} 21c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek } 22c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek return 1.0; 23c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek} 24