93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // 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
 |