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
 |