1*e925968eSBalazs Benics // RUN: %clang_analyze_cc1 -std=c++2b -verify %s \ 2*e925968eSBalazs Benics // RUN: -analyzer-checker=core,debug.ExprInspection 3*e925968eSBalazs Benics 4*e925968eSBalazs Benics template <typename T> void clang_analyzer_dump(T); 5*e925968eSBalazs Benics 6*e925968eSBalazs Benics struct Adder { 7*e925968eSBalazs Benics int data; operator ()Adder8*e925968eSBalazs Benics static int operator()(int x, int y) { 9*e925968eSBalazs Benics clang_analyzer_dump(x); // expected-warning {{1}} 10*e925968eSBalazs Benics clang_analyzer_dump(y); // expected-warning {{2}} 11*e925968eSBalazs Benics return x + y; 12*e925968eSBalazs Benics } 13*e925968eSBalazs Benics }; 14*e925968eSBalazs Benics static_operator_call_inlines()15*e925968eSBalazs Benicsvoid static_operator_call_inlines() { 16*e925968eSBalazs Benics Adder s{10}; 17*e925968eSBalazs Benics clang_analyzer_dump(s(1, 2)); // expected-warning {{3}} 18*e925968eSBalazs Benics } 19*e925968eSBalazs Benics 20*e925968eSBalazs Benics struct DataWithCtor { 21*e925968eSBalazs Benics int x; 22*e925968eSBalazs Benics int y; DataWithCtorDataWithCtor23*e925968eSBalazs Benics DataWithCtor(int parm) : x(parm + 10), y(parm + 20) { 24*e925968eSBalazs Benics clang_analyzer_dump(this); // expected-warning {{&v}} 25*e925968eSBalazs Benics } 26*e925968eSBalazs Benics }; 27*e925968eSBalazs Benics 28*e925968eSBalazs Benics struct StaticSubscript { operator []StaticSubscript29*e925968eSBalazs Benics static void operator[](DataWithCtor v) { 30*e925968eSBalazs Benics clang_analyzer_dump(v.x); // expected-warning {{20}} 31*e925968eSBalazs Benics clang_analyzer_dump(v.y); // expected-warning {{30}} 32*e925968eSBalazs Benics } 33*e925968eSBalazs Benics }; 34*e925968eSBalazs Benics top()35*e925968eSBalazs Benicsvoid top() { 36*e925968eSBalazs Benics StaticSubscript s; 37*e925968eSBalazs Benics s[DataWithCtor{10}]; 38*e925968eSBalazs Benics } 39