xref: /llvm-project/clang/test/Analysis/structured_bindings.cpp (revision 12f78e740c5419f7d1fbcf8f2106e7a40cd1d6f7)
1 // RUN: %clang_analyze_cc1 -std=c++17 -analyzer-checker=core,debug.ExprInspection -verify %s
2 
3 void clang_analyzer_eval(bool);
4 
5 struct s { int a; };
6 void foo() {
7   auto [a] = s{1};
8   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
9 }
10 
11 struct s2 {
12   int &x;
13 };
14 
15 int *foo2(s2 in) {
16   auto [a] = in;
17   return &a;
18 }
19 
20 void bar() {
21   int i = 1;
22   s2 a{i};
23 
24   auto *x = foo2(a);
25 
26   clang_analyzer_eval(*x == i); // expected-warning{{TRUE}}
27 
28   *x = 2;
29 
30   clang_analyzer_eval(*x == 2); // expected-warning{{TRUE}}
31   clang_analyzer_eval(i == 2);  // expected-warning{{TRUE}}
32 }
33