forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -fcxx-exceptions %s
 | |
| // RUN: %clang_cc1 -fsyntax-only -ast-dump -ast-dump-filter test -std=c++11 -fcxx-exceptions %s | FileCheck %s
 | |
| // expected-no-diagnostics
 | |
| 
 | |
| class testClass1 {
 | |
| };
 | |
| // CHECK-LABEL: CXXRecordDecl{{.*}} testClass1
 | |
| // CHECK-NOT: AnnotateAttr
 | |
| 
 | |
| #pragma clang attribute push (__attribute__((annotate("test"))), apply_to=any(record, field, variable, function, namespace, type_alias))
 | |
| 
 | |
| class testClass2 {
 | |
|   void testMethod1(int param);
 | |
| 
 | |
|   testClass2();
 | |
| 
 | |
|   testClass2 *operator -> ();
 | |
| };
 | |
| // CHECK-LABEL: CXXRecordDecl{{.*}} testClass2
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| // CHECK: CXXMethodDecl{{.*}} testMethod1
 | |
| // CHECK-NEXT: ParmVarDecl{{.*}} param
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| // CHECK-NEXT: CXXConstructorDecl
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| // CHECK-NEXT: CXXMethodDecl{{.*}} operator->
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| 
 | |
| #pragma clang attribute push (__attribute__((annotate("method"))), apply_to=any(record, field, variable, function, namespace, type_alias))
 | |
| 
 | |
| void testClass2::testMethod1(int param) {
 | |
| 
 | |
| #pragma clang attribute pop
 | |
| }
 | |
| // CHECK-LABEL: CXXMethodDecl{{.*}}prev{{.*}} testMethod1
 | |
| // CHECK-NEXT: ParmVarDecl{{.*}} param
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "method"
 | |
| // CHECK-NEXT: CompoundStmt
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "method"
 | |
| 
 | |
| namespace testNamespace {
 | |
| }
 | |
| // CHECK-LABEL: NamespaceDecl{{.*}} testNamespace
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| 
 | |
| class testClassForward;
 | |
| // CHECK-LABEL: CXXRecordDecl{{.*}} testClassForward
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| 
 | |
| namespace testNamespaceAlias = testNamespace;
 | |
| // CHECK-LABEL: NamespaceAliasDecl{{.*}} testNamespaceAlias
 | |
| // CHECK-NOT: AnnotateAttr
 | |
| 
 | |
| using testTypeAlias = testClass2;
 | |
| // CHECK-LABEL: TypeAliasDecl{{.*}} testTypeAlias
 | |
| // CHECK: AnnotateAttr{{.*}} "test"
 | |
| 
 | |
| void testCatchVariable() {
 | |
|   try {
 | |
|   } catch (int testCatch) {
 | |
|   }
 | |
|   testCatchVariable();
 | |
| }
 | |
| // CHECK-LABEL: FunctionDecl{{.*}} testCatchVariable
 | |
| // CHECK: CXXCatchStmt
 | |
| // CHECK-NEXT: VarDecl{{.*}} testCatch
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| 
 | |
| void testLambdaMethod() {
 | |
|   auto l = [] () { };
 | |
|   testLambdaMethod();
 | |
| }
 | |
| // CHECK-LABEL: FunctionDecl{{.*}} testLambdaMethod
 | |
| // CHECK: LambdaExpr
 | |
| // CHECK-NEXT: CXXRecordDecl
 | |
| // CHECK-NEXT: CXXMethodDecl{{.*}} operator()
 | |
| // CHECK-NEXT: CompoundStmt
 | |
| // CHECK-NEXT: AnnotateAttr{{.*}} "test"
 | |
| 
 | |
| #pragma clang attribute pop
 | |
| 
 | |
| #pragma clang attribute push (__attribute__((require_constant_initialization)), apply_to=variable(is_global))
 | |
| 
 | |
| int testCI1 = 1;
 | |
| // CHECK-LABEL: VarDecl{{.*}} testCI1
 | |
| // CHECK-NEXT: IntegerLiteral
 | |
| // CHECK-NEXT: RequireConstantInitAttr
 | |
| 
 | |
| #pragma clang attribute pop
 | |
| 
 | |
| int testNoCI = 0;
 | |
| // CHECK-LABEL: VarDecl{{.*}} testNoCI
 | |
| // CHECK-NEXT: IntegerLiteral
 | |
| // CHECK-NOT: RequireConstantInitAttr
 | |
| 
 | |
| // Check support for CXX11 style attributes
 | |
| #pragma clang attribute push ([[noreturn]], apply_to = function)
 | |
| 
 | |
| void testNoReturn();
 | |
| // CHECK-LABEL: FunctionDecl{{.*}} testNoReturn
 | |
| // CHECK-NEXT: CXX11NoReturnAttr
 | |
| 
 | |
| #pragma clang attribute pop
 |