33 lines · cpp
1// RUN: %clang_analyze_cc1 -std=c++17 -analyzer-checker=core,debug.ExprInspection -verify %s2 3void clang_analyzer_eval(bool);4 5struct s { int a; };6void foo() {7 auto [a] = s{1};8 clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}9}10 11struct s2 {12 int &x;13};14 15int *foo2(s2 in) {16 auto [a] = in;17 return &a;18}19 20void 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