summaryrefslogtreecommitdiff
path: root/test/Tooling/clang-diff-ast.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Tooling/clang-diff-ast.cpp')
-rw-r--r--test/Tooling/clang-diff-ast.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/test/Tooling/clang-diff-ast.cpp b/test/Tooling/clang-diff-ast.cpp
new file mode 100644
index 0000000000000..a8efda50a4052
--- /dev/null
+++ b/test/Tooling/clang-diff-ast.cpp
@@ -0,0 +1,92 @@
+// RUN: clang-diff -ast-dump %s -- -std=c++11 | FileCheck %s
+
+
+// CHECK: {{^}}TranslationUnitDecl(0)
+// CHECK: {{^}} NamespaceDecl: test;(
+namespace test {
+
+// CHECK: {{^}} FunctionDecl: :f(
+// CHECK: CompoundStmt(
+void f() {
+ // CHECK: VarDecl: i(int)(
+ // CHECK: IntegerLiteral: 1
+ auto i = 1;
+ // CHECK: FloatingLiteral: 1.5(
+ auto r = 1.5;
+ // CHECK: CXXBoolLiteralExpr: true(
+ auto b = true;
+ // CHECK: CallExpr(
+ // CHECK-NOT: ImplicitCastExpr
+ // CHECK: DeclRefExpr: :f(
+ f();
+ // CHECK: UnaryOperator: ++(
+ ++i;
+ // CHECK: BinaryOperator: =(
+ i = i;
+}
+
+} // end namespace test
+
+// CHECK: UsingDirectiveDecl: test(
+using namespace test;
+
+// CHECK: TypedefDecl: nat;unsigned int;(
+typedef unsigned nat;
+// CHECK: TypeAliasDecl: real;double;(
+using real = double;
+
+class Base {
+};
+
+// CHECK: CXXRecordDecl: X;X;(
+class X : Base {
+ int m;
+ // CHECK: CXXMethodDecl: :foo(const char *(int)
+ // CHECK: ParmVarDecl: i(int)(
+ const char *foo(int i) {
+ if (i == 0)
+ // CHECK: StringLiteral: foo(
+ return "foo";
+ // CHECK-NOT: ImplicitCastExpr
+ return 0;
+ }
+
+ // CHECK: AccessSpecDecl: public(
+public:
+ int not_initialized;
+ // CHECK: CXXConstructorDecl: :X(void (char, int){{( __attribute__\(\(thiscall\)\))?}})(
+ // CHECK-NEXT: ParmVarDecl: s(char)
+ // CHECK-NEXT: ParmVarDecl: (int)
+ // CHECK-NEXT: CXXCtorInitializer: Base
+ // CHECK-NEXT: CXXConstructExpr
+ // CHECK-NEXT: CXXCtorInitializer: m
+ // CHECK-NEXT: IntegerLiteral: 0
+ X(char s, int) : Base(), m(0) {
+ // CHECK-NEXT: CompoundStmt
+ // CHECK: MemberExpr: :m(
+ int x = m;
+ }
+ // CHECK: CXXConstructorDecl: :X(void (char){{( __attribute__\(\(thiscall\)\))?}})(
+ // CHECK: CXXCtorInitializer: X
+ X(char s) : X(s, 4) {}
+};
+
+#define M (void)1
+#define MA(a, b) (void)a, b
+// CHECK: FunctionDecl
+// CHECK-NEXT: CompoundStmt
+void macros() {
+ M;
+ MA(1, 2);
+}
+
+#ifndef GUARD
+#define GUARD
+// CHECK-NEXT: NamespaceDecl
+namespace world {
+// nodes from other files are excluded, there should be no output here
+#include "clang-diff-ast.cpp"
+}
+// CHECK-NEXT: FunctionDecl: sentinel
+void sentinel();
+#endif