xref: /llvm-project/clang/test/Analysis/cxx23-static-operator.cpp (revision e925968e7815ac3810fdb54bb884b8a8bed02eb5)
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 Benics void 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 Benics void top() {
36*e925968eSBalazs Benics   StaticSubscript s;
37*e925968eSBalazs Benics   s[DataWithCtor{10}];
38*e925968eSBalazs Benics }
39