1*9d2e8307Sisuckatcs // RUN: %clang_analyze_cc1 -std=c++17 -analyzer-checker=core,debug.ExprInspection -verify %s 2*9d2e8307Sisuckatcs 3*9d2e8307Sisuckatcs void clang_analyzer_eval(bool); 45c2d5f06SNico Weber 55c2d5f06SNico Weber struct s { int a; }; foo()65c2d5f06SNico Weberint foo() { 7*9d2e8307Sisuckatcs auto [a] = s{1}; 8*9d2e8307Sisuckatcs clang_analyzer_eval(a == 1); // expected-warning{{TRUE}} 91da13237SDávid Bolvanský } // expected-warning{{non-void function does not return a value}} 105c2d5f06SNico Weber 11*9d2e8307Sisuckatcs struct s2 { 12*9d2e8307Sisuckatcs int &x; 13*9d2e8307Sisuckatcs }; 14*9d2e8307Sisuckatcs foo2(s2 in)15*9d2e8307Sisuckatcsint *foo2(s2 in) { 16*9d2e8307Sisuckatcs auto [a] = in; 17*9d2e8307Sisuckatcs return &a; 18*9d2e8307Sisuckatcs } 19*9d2e8307Sisuckatcs bar()20*9d2e8307Sisuckatcsvoid bar() { 21*9d2e8307Sisuckatcs int i = 1; 22*9d2e8307Sisuckatcs s2 a{i}; 23*9d2e8307Sisuckatcs 24*9d2e8307Sisuckatcs auto *x = foo2(a); 25*9d2e8307Sisuckatcs 26*9d2e8307Sisuckatcs clang_analyzer_eval(*x == i); // expected-warning{{TRUE}} 27*9d2e8307Sisuckatcs 28*9d2e8307Sisuckatcs *x = 2; 29*9d2e8307Sisuckatcs 30*9d2e8307Sisuckatcs clang_analyzer_eval(*x == 2); // expected-warning{{TRUE}} 31*9d2e8307Sisuckatcs clang_analyzer_eval(i == 2); // expected-warning{{TRUE}} 32*9d2e8307Sisuckatcs } 33