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