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() { 184f4f349208b2b2307454e169ac7b039e989f003fDavid Blaikie double x; // expected-note{{initialize the variable 'x' to silence this warning}} 1953b24ebc37e6edd14ed31e2ef7cbed094ee87e51Ted Kremenek if (bar() || baz() || Foo() || init(&x)) 2053b24ebc37e6edd14ed31e2ef7cbed094ee87e51Ted Kremenek return 1.0; 2153b24ebc37e6edd14ed31e2ef7cbed094ee87e51Ted Kremenek 22584b9d6bd0ce199787900695fe75528fcde405feChandler Carruth return x; // expected-warning {{variable 'x' may be uninitialized when used here}} 23c5e43c19ddb40b8a1371291f73ae66fe54951ca5Ted Kremenek} 24