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