| // RUN: %clang_cc1 -fsyntax-only -Wuninitialized-experimental -fsyntax-only %s -verify |
| |
| int test1_aux(int &x); |
| int test1() { |
| int x; |
| test1_aux(x); |
| return x; // no-warning |
| } |
| |
| int test2_aux() { |
| int x; |
| int &y = x; |
| return x; // no-warning |
| } |
| |
| // Handle cases where the CFG may constant fold some branches, thus |
| // mitigating the need for some path-sensitivity in the analysis. |
| unsigned test3_aux(); |
| unsigned test3() { |
| unsigned x = 0; |
| const bool flag = true; |
| if (flag && (x = test3_aux()) == 0) { |
| return x; |
| } |
| return x; |
| } |
| unsigned test3_b() { |
| unsigned x ; |
| const bool flag = true; |
| if (flag && (x = test3_aux()) == 0) { |
| x = 1; |
| } |
| return x; // no-warning |
| } |
| unsigned test3_c() { |
| unsigned x; // expected-note{{declared here}} expected-note{{add initialization}} |
| const bool flag = false; |
| if (flag && (x = test3_aux()) == 0) { |
| x = 1; |
| } |
| return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}} |
| } |
| |
| enum test4_A { |
| test4_A_a, test_4_A_b |
| }; |
| test4_A test4() { |
| test4_A a; // expected-note{{variable 'a' is declared here}} |
| return a; // expected-warning{{variable 'a' is possibly uninitialized when used here}} |
| } |
| |