1 // RUN: %clang_cc1 -ast-dump %s | FileCheck %s
2 
3 template<int N = 0>
4 void pr43370() {
5   int arr[2];
6   __atomic_store_n(arr, 0, 5);
7 }
8 
9 template<int N = 0>
10 void foo() {
11   int arr[2];
12   (void)__atomic_compare_exchange_n(arr, arr, 1, 0, 3, 4);
13 }
14 
15 void useage(){
16   pr43370();
17   foo();
18 }
19 
20 // CHECK:FunctionTemplateDecl 0x{{[0-9a-f]+}} <{{[^,]+}}, line:7:1> line:4:6 pr43370
21 // CHECK: AtomicExpr
22 // CHECK-NEXT: ImplicitCastExpr
23 // CHECK-SAME: <ArrayToPointerDecay>
24 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-f]+}} <{{[^:]+}}:20> 'int [2]' lvalue Var 0x{{[0-9a-f]+}} 'arr' 'int [2]'
25 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:28> 'int' 5
26 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:25> 'int' 0
27 // CHECK:FunctionDecl 0x{{[0-9a-f]+}} <line:4:1, line:7:1> line:4:6 used pr43370
28 // CHECK: AtomicExpr
29 // CHECK-NEXT: ImplicitCastExpr
30 // CHECK-SAME: <ArrayToPointerDecay>
31 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-f]+}} <{{[^:]+}}:20> 'int [2]' lvalue Var 0x{{[0-9a-f]+}} 'arr' 'int [2]'
32 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:28> 'int' 5
33 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:25> 'int' 0
34 
35 // CHECK:FunctionTemplateDecl 0x{{[0-9a-f]+}} <line:9:1, line:13:1> line:10:6 foo
36 // CHECK: AtomicExpr
37 // CHECK-NEXT: ImplicitCastExpr
38 // CHECK-SAME: <ArrayToPointerDecay>
39 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-f]+}} <{{[^:]+}}:37> 'int [2]' lvalue Var 0x{{[0-9a-f]+}} 'arr' 'int [2]'
40 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:53> 'int' 3
41 // CHECK-NEXT: ImplicitCastExpr
42 // CHECK-SAME: <ArrayToPointerDecay>
43 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-f]+}} <{{[^:]+}}:42> 'int [2]' lvalue Var 0x{{[0-9a-f]+}} 'arr' 'int [2]'
44 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:56> 'int' 4
45 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:47> 'int' 1
46 // CHECK-NEXT: ImplicitCastExpr
47 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:50> 'int' 0
48 // CHECK:FunctionDecl 0x{{[0-9a-f]+}} <line:10:1, line:13:1> line:10:6 used foo
49 // CHECK: AtomicExpr
50 // CHECK-NEXT: ImplicitCastExpr
51 // CHECK-SAME: <ArrayToPointerDecay>
52 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-f]+}} <{{[^:]+}}:37> 'int [2]' lvalue Var 0x{{[0-9a-f]+}} 'arr' 'int [2]'
53 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:53> 'int' 3
54 // CHECK-NEXT: ImplicitCastExpr
55 // CHECK-SAME: <ArrayToPointerDecay>
56 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-f]+}} <{{[^:]+}}:42> 'int [2]' lvalue Var 0x{{[0-9a-f]+}} 'arr' 'int [2]'
57 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:56> 'int' 4
58 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:47> 'int' 1
59 // CHECK-NEXT: ImplicitCastExpr
60 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-f]+}} <{{[^:]+}}:50> 'int' 0
61