1 // RUN: %clang_cc1 -std=c++17 -ast-dump %s -ast-dump-filter Test | FileCheck %s
2
3 struct A{};
4
5 template <typename T, typename U>
Test(T * pt,U * pu)6 auto Test(T* pt, U* pu) {
7 // CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '*'
8 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
9 (void)*pt;
10
11 // CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '++'
12 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
13 (void)(++pt);
14
15 // CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '+'
16 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
17 (void)(+pt);
18
19 // CHECK: BinaryOperator {{.*}} '<dependent type>' '+'
20 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
21 // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 3
22 (void)(pt + 3);
23
24 // CHECK: BinaryOperator {{.*}} '<dependent type>' '-'
25 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
26 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
27 (void)(pt - pt);
28
29 // CHECK: BinaryOperator {{.*}} '<dependent type>' '-'
30 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
31 // CHECK-NEXT: DeclRefExpr {{.*}} 'U *' lvalue ParmVar {{.*}} 'pu' 'U *'
32 (void)(pt - pu);
33
34 // CHECK: BinaryOperator {{.*}} '<dependent type>' '=='
35 // CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
36 // CHECK-NEXT: DeclRefExpr {{.*}} 'U *' lvalue ParmVar {{.*}} 'pu' 'U *'
37 (void)(pt == pu);
38
39 }
40
41
42