| // RUN: %clang_analyze_cc1 -std=c++2b -verify %s \ | |
| // RUN: -analyzer-checker=core,debug.ExprInspection | |
| template <typename T> void clang_analyzer_dump(T); | |
| struct Adder { | |
| int data; | |
| static int operator()(int x, int y) { | |
| clang_analyzer_dump(x); // expected-warning {{1}} | |
| clang_analyzer_dump(y); // expected-warning {{2}} | |
| return x + y; | |
| } | |
| }; | |
| void static_operator_call_inlines() { | |
| Adder s{10}; | |
| clang_analyzer_dump(s(1, 2)); // expected-warning {{3}} | |
| } | |
| struct DataWithCtor { | |
| int x; | |
| int y; | |
| DataWithCtor(int parm) : x(parm + 10), y(parm + 20) { | |
| clang_analyzer_dump(this); // expected-warning {{&v}} | |
| } | |
| }; | |
| struct StaticSubscript { | |
| static void operator[](DataWithCtor v) { | |
| clang_analyzer_dump(v.x); // expected-warning {{20}} | |
| clang_analyzer_dump(v.y); // expected-warning {{30}} | |
| } | |
| }; | |
| void top() { | |
| StaticSubscript s; | |
| s[DataWithCtor{10}]; | |
| } |