xref: /llvm-project/clang/test/SemaCXX/uninit-variables.cpp (revision e543be3531ccab3ac925de33359d292476b41eb1)
1 // RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only %s -verify
2 
3 int test1_aux(int &x);
4 int test1() {
5   int x;
6   test1_aux(x);
7   return x; // no-warning
8 }
9 
10 int test2_aux() {
11   int x;
12   int &y = x;
13   return x; // no-warning
14 }
15 
16 // Handle cases where the CFG may constant fold some branches, thus
17 // mitigating the need for some path-sensitivity in the analysis.
18 unsigned test3_aux();
19 unsigned test3() {
20   unsigned x = 0;
21   const bool flag = true;
22   if (flag && (x = test3_aux()) == 0) {
23     return x;
24   }
25   return x;
26 }
27 unsigned test3_b() {
28   unsigned x ;
29   const bool flag = true;
30   if (flag && (x = test3_aux()) == 0) {
31     x = 1;
32   }
33   return x; // no-warning
34 }
35 unsigned test3_c() {
36   unsigned x ; // expected-warning{{use of uninitialized variable 'x'}} expected-note{{add initialization to silence this warning}}
37   const bool flag = false;
38   if (flag && (x = test3_aux()) == 0) {
39     x = 1;
40   }
41   return x; // expected-note{{variable 'x' is possibly uninitialized when used here}}
42 }
43 
44