|  | // RUN: %clang_analyze_cc1 -std=c++17 -analyzer-checker=core,debug.ExprInspection -verify %s | 
|  |  | 
|  | void clang_analyzer_eval(bool); | 
|  |  | 
|  | struct s { int a; }; | 
|  | void foo() { | 
|  | auto [a] = s{1}; | 
|  | clang_analyzer_eval(a == 1); // expected-warning{{TRUE}} | 
|  | } | 
|  |  | 
|  | struct s2 { | 
|  | int &x; | 
|  | }; | 
|  |  | 
|  | int *foo2(s2 in) { | 
|  | auto [a] = in; | 
|  | return &a; | 
|  | } | 
|  |  | 
|  | void bar() { | 
|  | int i = 1; | 
|  | s2 a{i}; | 
|  |  | 
|  | auto *x = foo2(a); | 
|  |  | 
|  | clang_analyzer_eval(*x == i); // expected-warning{{TRUE}} | 
|  |  | 
|  | *x = 2; | 
|  |  | 
|  | clang_analyzer_eval(*x == 2); // expected-warning{{TRUE}} | 
|  | clang_analyzer_eval(i == 2);  // expected-warning{{TRUE}} | 
|  | } |