forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple %itanium_abi_triple %s -o - | FileCheck %s
 | |
| 
 | |
| // Cases to show some non-trivial types with flags combined with DIFlagNonTrivial and DIFlagTypePassByValue.
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Explicit",{{.*}}flags: DIFlagTypePassByValue | DIFlagNonTrivial
 | |
| struct Explicit {
 | |
|   explicit Explicit();
 | |
|   int a;
 | |
| } Explicit;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Struct",{{.*}}flags: DIFlagTypePassByValue | DIFlagNonTrivial
 | |
| struct Struct {
 | |
|   Struct() {}
 | |
| } Struct;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Annotated",{{.*}}flags: DIFlagTypePassByValue | DIFlagNonTrivial
 | |
| struct __attribute__((trivial_abi)) Annotated {
 | |
|   Annotated() {};
 | |
| } Annotated;
 | |
| 
 | |
| 
 | |
| // Check a non-composite type
 | |
| // CHECK-DAG: !DIGlobalVariable(name: "GlobalVar", {{.*}}type: {{.*}}, isLocal: false, isDefinition: true)
 | |
| int GlobalVar = 0;
 | |
| 
 | |
| // Cases to test composite type's triviality
 | |
| 
 | |
| // CHECK-DAG:      {{.*}}!DIGlobalVariable(name: "Union",
 | |
| // CHECK-DAG-NEXT: {{^((?!\bDIFlagNonTrivial\b).)*$}}
 | |
| union Union {
 | |
|   int a;
 | |
| } Union;
 | |
| 
 | |
| // CHECK-DAG:      {{.*}}!DIGlobalVariable(name: "Trivial",
 | |
| // CHECK-DAG-NEXT: {{^((?!\bDIFlagNonTrivial\b).)*$}}
 | |
| struct Trivial {
 | |
|   int i;
 | |
| } Trivial;
 | |
| 
 | |
| // CHECK-DAG:       {{.*}}!DIGlobalVariable(name: "TrivialA",
 | |
| // CHECK-DAG-NEXT:  {{^((?!\bDIFlagNonTrivial\b).)*$}}
 | |
| struct TrivialA {
 | |
|   TrivialA() = default;
 | |
| } TrivialA;
 | |
| 
 | |
| // CHECK-DAG:       {{.*}}!DIGlobalVariable(name: "TrivialB",
 | |
| // CHECK-DAG-NEXT:  {{^((?!\bDIFlagNonTrivial\b).)*$}}
 | |
| struct TrivialB {
 | |
|   int m;
 | |
|   TrivialB(int x) { m = x; }
 | |
|   TrivialB() = default;
 | |
| } TrivialB;
 | |
| 
 | |
| // CHECK-DAG:       {{.*}}!DIGlobalVariable(name: "TrivialC",
 | |
| // CHECK-DAG-NEXT:  {{^((?!\bDIFlagNonTrivial\b).)*$}}
 | |
| struct TrivialC {
 | |
|   struct Trivial x;
 | |
| } TrivialC;
 | |
| 
 | |
| // CHECK-DAG:       {{.*}}!DIGlobalVariable(name: "TrivialD",
 | |
| // CHECK-DAG-NEXT:  {{^((?!\bDIFlagNonTrivial\b).)*$}}
 | |
| struct NT {
 | |
|   NT() {};
 | |
| };
 | |
| struct TrivialD {
 | |
|   static struct NT x; // Member is non-trivial but is static.
 | |
| } TrivialD;
 | |
| 
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivial",{{.*}}flags: {{.*}}DIFlagNonTrivial
 | |
| struct NonTrivial {
 | |
|   NonTrivial() {}
 | |
| } NonTrivial;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialA",{{.*}}flags: {{.*}}DIFlagNonTrivial
 | |
| struct NonTrivialA {
 | |
|   ~NonTrivialA();
 | |
| } NonTrivialA;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialB",{{.*}}flags: {{.*}}DIFlagNonTrivial
 | |
| struct NonTrivialB {
 | |
|   struct NonTrivial x;
 | |
| } NonTrivialB;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialC",{{.*}}flags: {{.*}}DIFlagNonTrivial
 | |
| struct NonTrivialC {
 | |
|   virtual void f() {}
 | |
| } NonTrivialC;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialD",{{.*}}flags: {{.*}}DIFlagNonTrivial
 | |
| struct NonTrivialD : NonTrivial {
 | |
| } NonTrivialD;
 | |
| 
 | |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialE",{{.*}}flags: {{.*}}DIFlagNonTrivial
 | |
| struct NonTrivialE : Trivial, NonTrivial {
 | |
| } NonTrivialE;
 |