forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++11 -ast-dump -ast-dump-filter Test %s | FileCheck --strict-whitespace %s
 | 
						|
 | 
						|
int TestLocation
 | 
						|
__attribute__((unused));
 | 
						|
// CHECK:      VarDecl{{.*}}TestLocation
 | 
						|
// CHECK-NEXT:   UnusedAttr 0x{{[^ ]*}} <line:[[@LINE-2]]:16>
 | 
						|
 | 
						|
int TestIndent
 | 
						|
__attribute__((unused));
 | 
						|
// CHECK:      {{^}}VarDecl{{.*TestIndent[^()]*$}}
 | 
						|
// CHECK-NEXT: {{^}}`-UnusedAttr{{[^()]*$}}
 | 
						|
 | 
						|
void TestAttributedStmt() {
 | 
						|
  switch (1) {
 | 
						|
  case 1:
 | 
						|
    [[clang::fallthrough]];
 | 
						|
  case 2:
 | 
						|
    ;
 | 
						|
  }
 | 
						|
}
 | 
						|
// CHECK:      FunctionDecl{{.*}}TestAttributedStmt
 | 
						|
// CHECK:      AttributedStmt
 | 
						|
// CHECK-NEXT:   FallThroughAttr
 | 
						|
// CHECK-NEXT:   NullStmt
 | 
						|
 | 
						|
[[clang::warn_unused_result]] int TestCXX11DeclAttr();
 | 
						|
// CHECK:      FunctionDecl{{.*}}TestCXX11DeclAttr
 | 
						|
// CHECK-NEXT:   WarnUnusedResultAttr
 | 
						|
 | 
						|
int TestAlignedNull __attribute__((aligned));
 | 
						|
// CHECK:      VarDecl{{.*}}TestAlignedNull
 | 
						|
// CHECK-NEXT:   AlignedAttr
 | 
						|
// CHECK-NEXT:     <<<NULL>>>
 | 
						|
 | 
						|
int TestAlignedExpr __attribute__((aligned(4)));
 | 
						|
// CHECK:      VarDecl{{.*}}TestAlignedExpr
 | 
						|
// CHECK-NEXT:   AlignedAttr
 | 
						|
// CHECK-NEXT:     IntegerLiteral
 | 
						|
 | 
						|
int TestEnum __attribute__((visibility("default")));
 | 
						|
// CHECK:      VarDecl{{.*}}TestEnum
 | 
						|
// CHECK-NEXT:   VisibilityAttr{{.*}} Default
 | 
						|
 | 
						|
class __attribute__((lockable)) Mutex {
 | 
						|
} mu1, mu2;
 | 
						|
int TestExpr __attribute__((guarded_by(mu1)));
 | 
						|
// CHECK:      VarDecl{{.*}}TestExpr
 | 
						|
// CHECK-NEXT:   GuardedByAttr
 | 
						|
// CHECK-NEXT:     DeclRefExpr{{.*}}mu1
 | 
						|
 | 
						|
class Mutex TestVariadicExpr __attribute__((acquired_after(mu1, mu2)));
 | 
						|
// CHECK:      VarDecl{{.*}}TestVariadicExpr
 | 
						|
// CHECK:        AcquiredAfterAttr
 | 
						|
// CHECK-NEXT:     DeclRefExpr{{.*}}mu1
 | 
						|
// CHECK-NEXT:     DeclRefExpr{{.*}}mu2
 | 
						|
 | 
						|
void function1(void *) {
 | 
						|
  int TestFunction __attribute__((cleanup(function1)));
 | 
						|
}
 | 
						|
// CHECK:      VarDecl{{.*}}TestFunction
 | 
						|
// CHECK-NEXT:   CleanupAttr{{.*}} Function{{.*}}function1
 | 
						|
 | 
						|
void TestIdentifier(void *, int)
 | 
						|
__attribute__((pointer_with_type_tag(ident1,1,2)));
 | 
						|
// CHECK: FunctionDecl{{.*}}TestIdentifier
 | 
						|
// CHECK:   ArgumentWithTypeTagAttr{{.*}} ident1
 | 
						|
 | 
						|
void TestBool(void *, int)
 | 
						|
__attribute__((pointer_with_type_tag(bool1,1,2)));
 | 
						|
// CHECK: FunctionDecl{{.*}}TestBool
 | 
						|
// CHECK:   ArgumentWithTypeTagAttr{{.*}} IsPointer
 | 
						|
 | 
						|
void TestUnsigned(void *, int)
 | 
						|
__attribute__((pointer_with_type_tag(unsigned1,1,2)));
 | 
						|
// CHECK: FunctionDecl{{.*}}TestUnsigned
 | 
						|
// CHECK:   ArgumentWithTypeTagAttr{{.*}} 0 1
 | 
						|
 | 
						|
void TestInt(void) __attribute__((constructor(123)));
 | 
						|
// CHECK:      FunctionDecl{{.*}}TestInt
 | 
						|
// CHECK-NEXT:   ConstructorAttr{{.*}} 123
 | 
						|
 | 
						|
int TestString __attribute__((alias("alias1")));
 | 
						|
// CHECK:      VarDecl{{.*}}TestString
 | 
						|
// CHECK-NEXT:   AliasAttr{{.*}} "alias1"
 | 
						|
 | 
						|
extern struct s1 TestType
 | 
						|
__attribute__((type_tag_for_datatype(ident1,int)));
 | 
						|
// CHECK:      VarDecl{{.*}}TestType
 | 
						|
// CHECK-NEXT:   TypeTagForDatatypeAttr{{.*}} int
 | 
						|
 | 
						|
void *TestVariadicUnsigned1(int) __attribute__((alloc_size(1)));
 | 
						|
// CHECK: FunctionDecl{{.*}}TestVariadicUnsigned1
 | 
						|
// CHECK:   AllocSizeAttr{{.*}} 0
 | 
						|
 | 
						|
void *TestVariadicUnsigned2(int, int) __attribute__((alloc_size(1,2)));
 | 
						|
// CHECK: FunctionDecl{{.*}}TestVariadicUnsigned2
 | 
						|
// CHECK:   AllocSizeAttr{{.*}} 0 1
 |