uninit-variables-conditional.cpp revision 584b9d6bd0ce199787900695fe75528fcde405fe
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}}
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