brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · e8454bd Raw
56 lines · cpp
1// RUN: %clang_cc1 -std=c++23 %s -ast-dump -triple x86_64-unknown-unknown -o - | FileCheck -strict-whitespace %s2 3struct Functor {4  static int operator()(int x, int y) {5    return x + y;6  }7  static int operator[](int x, int y) {8    return x + y;9  }10};11 12Functor& get_functor() {13  static Functor functor;14  return functor;15}16 17void call_static_operators() {18  Functor functor;19 20  int z1 = functor(1, 2);21  // CHECK:      CXXOperatorCallExpr {{.*}} 'int' '()'22  // CHECK-NEXT: |-ImplicitCastExpr {{.*}} <col:19, col:24> 'int (*)(int, int)' <FunctionToPointerDecay>23  // CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:19, col:24> 'int (int, int)' lvalue CXXMethod {{.*}} 'operator()' 'int (int, int)'24  // CHECK-NEXT: |-DeclRefExpr {{.*}} <col:12> 'Functor' lvalue Var {{.*}} 'functor' 'Functor'25  // CHECK-NEXT: |-IntegerLiteral {{.*}} <col:20> 'int' 126  // CHECK-NEXT: `-IntegerLiteral {{.*}} <col:23> 'int' 227 28  int z2 = functor[1, 2];29  // CHECK:      CXXOperatorCallExpr {{.*}} 'int' '[]'30  // CHECK-NEXT: |-ImplicitCastExpr {{.*}} <col:19, col:24> 'int (*)(int, int)' <FunctionToPointerDecay>31  // CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:19, col:24> 'int (int, int)' lvalue CXXMethod {{.*}} 'operator[]' 'int (int, int)'32  // CHECK-NEXT: |-DeclRefExpr {{.*}} <col:12> 'Functor' lvalue Var {{.*}} 'functor' 'Functor'33  // CHECK-NEXT: |-IntegerLiteral {{.*}} <col:20> 'int' 134  // CHECK-NEXT: `-IntegerLiteral {{.*}} <col:23> 'int' 235 36  int z3 = get_functor()(1, 2);37  // CHECK:      CXXOperatorCallExpr {{.*}} 'int' '()'38  // CHECK-NEXT: |-ImplicitCastExpr {{.*}} <col:25, col:30> 'int (*)(int, int)' <FunctionToPointerDecay>39  // CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:25, col:30> 'int (int, int)' lvalue CXXMethod {{.*}} 'operator()' 'int (int, int)'40  // CHECK-NEXT: |-CallExpr {{.*}} <col:12, col:24> 'Functor' lvalue41  // CHECK-NEXT: | `-ImplicitCastExpr {{.*}} <col:12> 'Functor &(*)()' <FunctionToPointerDecay>42  // CHECK-NEXT: |   `-DeclRefExpr {{.*}} <col:12> 'Functor &()' lvalue Function {{.*}} 'get_functor' 'Functor &()'43  // CHECK-NEXT: |-IntegerLiteral {{.*}} <col:26> 'int' 144  // CHECK-NEXT: `-IntegerLiteral {{.*}} <col:29> 'int' 245 46  int z4 = get_functor()[1, 2];47  // CHECK:      CXXOperatorCallExpr {{.*}} 'int' '[]'48  // CHECK-NEXT: |-ImplicitCastExpr {{.*}} <col:25, col:30> 'int (*)(int, int)' <FunctionToPointerDecay>49  // CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:25, col:30> 'int (int, int)' lvalue CXXMethod {{.*}} 'operator[]' 'int (int, int)'50  // CHECK-NEXT: |-CallExpr {{.*}} <col:12, col:24> 'Functor' lvalue51  // CHECK-NEXT: | `-ImplicitCastExpr {{.*}} <col:12> 'Functor &(*)()' <FunctionToPointerDecay>52  // CHECK-NEXT: |   `-DeclRefExpr {{.*}} <col:12> 'Functor &()' lvalue Function {{.*}} 'get_functor' 'Functor &()'53  // CHECK-NEXT: |-IntegerLiteral {{.*}} <col:26> 'int' 154  // CHECK-NEXT: `-IntegerLiteral {{.*}} <col:29> 'int' 255}56