1 // RUN: clang-diff -ast-dump %s -- -std=c++11 | FileCheck %s
2
3
4 // CHECK: {{^}}TranslationUnitDecl(0)
5 // CHECK: {{^}} NamespaceDecl: test;(
6 namespace test {
7
8 // CHECK: {{^}} FunctionDecl: :f(
9 // CHECK: CompoundStmt(
f()10 void f() {
11 // CHECK: VarDecl: i(int)(
12 // CHECK: IntegerLiteral: 1
13 auto i = 1;
14 // CHECK: FloatingLiteral: 1.5(
15 auto r = 1.5;
16 // CHECK: CXXBoolLiteralExpr: true(
17 auto b = true;
18 // CHECK: CallExpr(
19 // CHECK-NOT: ImplicitCastExpr
20 // CHECK: DeclRefExpr: :f(
21 f();
22 // CHECK: UnaryOperator: ++(
23 ++i;
24 // CHECK: BinaryOperator: =(
25 i = i;
26 }
27
28 } // end namespace test
29
30 // CHECK: UsingDirectiveDecl: test(
31 using namespace test;
32
33 // CHECK: TypedefDecl: nat;unsigned int;(
34 typedef unsigned nat;
35 // CHECK: TypeAliasDecl: real;double;(
36 using real = double;
37
38 class Base {
39 };
40
41 // CHECK: CXXRecordDecl: X;X;(
42 class X : Base {
43 int m;
44 // CHECK: CXXMethodDecl: :foo(const char *(int)
45 // CHECK: ParmVarDecl: i(int)(
foo(int i)46 const char *foo(int i) {
47 if (i == 0)
48 // CHECK: StringLiteral: foo(
49 return "foo";
50 // CHECK-NOT: ImplicitCastExpr
51 return 0;
52 }
53
54 // CHECK: AccessSpecDecl: public(
55 public:
56 int not_initialized;
57 // CHECK: CXXConstructorDecl: :X(void (char, int){{( __attribute__\(\(thiscall\)\))?}})(
58 // CHECK-NEXT: ParmVarDecl: s(char)
59 // CHECK-NEXT: ParmVarDecl: (int)
60 // CHECK-NEXT: CXXCtorInitializer: Base
61 // CHECK-NEXT: CXXConstructExpr
62 // CHECK-NEXT: CXXCtorInitializer: m
63 // CHECK-NEXT: IntegerLiteral: 0
X(char s,int)64 X(char s, int) : Base(), m(0) {
65 // CHECK-NEXT: CompoundStmt
66 // CHECK: MemberExpr: :m(
67 int x = m;
68 }
69 // CHECK: CXXConstructorDecl: :X(void (char){{( __attribute__\(\(thiscall\)\))?}})(
70 // CHECK: CXXCtorInitializer: X
X(char s)71 X(char s) : X(s, 4) {}
72 };
73
74 #define M (void)1
75 #define MA(a, b) (void)a, b
76 // CHECK: FunctionDecl
77 // CHECK-NEXT: CompoundStmt
macros()78 void macros() {
79 M;
80 MA(1, 2);
81 }
82
83 #ifndef GUARD
84 #define GUARD
85 // CHECK-NEXT: NamespaceDecl
86 namespace world {
87 // nodes from other files are excluded, there should be no output here
88 #include "clang-diff-ast.cpp"
89 }
90 // CHECK-NEXT: FunctionDecl: sentinel
91 void sentinel();
92 #endif
93