forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple x86_64-linux-gnu %s -o - | FileCheck %s
 | |
| 
 | |
| // Make sure that we emit a global variable for each of the members of the
 | |
| // anonymous union.
 | |
| 
 | |
| static union {
 | |
|   int c;
 | |
|   int d;
 | |
|   union {
 | |
|     int a;
 | |
|   };
 | |
|   struct {
 | |
|     int b;
 | |
|   };
 | |
| };
 | |
| 
 | |
| int test_it() {
 | |
|   c = 1;
 | |
|   d = 2;
 | |
|   a = 4;
 | |
|   return (c == 1);
 | |
| }
 | |
| 
 | |
| void foo() {
 | |
|   union {
 | |
|     int i;
 | |
|     char c;
 | |
|   };
 | |
|   i = 8;
 | |
| }
 | |
| 
 | |
| // A funky reinterpret cast idiom that we used to crash on.
 | |
| template <class T>
 | |
| unsigned char *buildBytes(const T v) {
 | |
|   static union {
 | |
|     unsigned char result[sizeof(T)];
 | |
|     T value;
 | |
|   };
 | |
|   value = v;
 | |
|   return result;
 | |
| }
 | |
| 
 | |
| void instantiate(int x) {
 | |
|   buildBytes(x);
 | |
| }
 | |
| 
 | |
| // CHECK: !DIGlobalVariable(name: "c",{{.*}} file: [[FILE:.*]], line: 6,{{.*}} isLocal: true, isDefinition: true
 | |
| // CHECK: !DIGlobalVariable(name: "d",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
 | |
| // CHECK: [[FILE]] = !DIFile(filename: "{{.*}}debug-info-anon-union-vars.cpp",
 | |
| // CHECK: !DIGlobalVariable(name: "a",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
 | |
| // CHECK: !DIGlobalVariable(name: "b",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
 | |
| // CHECK: !DIGlobalVariable(name: "result", {{.*}} isLocal: false, isDefinition: true
 | |
| // CHECK: !DIGlobalVariable(name: "value", {{.*}} isLocal: false, isDefinition: true
 | |
| // CHECK: !DILocalVariable(name: "i", {{.*}}, flags: DIFlagArtificial
 | |
| // CHECK: !DILocalVariable(name: "c", {{.*}}, flags: DIFlagArtificial
 | |
| // CHECK: !DILocalVariable(
 | |
| // CHECK-NOT: name:
 | |
| // CHECK: type: ![[UNION:[0-9]+]]
 | |
| // CHECK: ![[UNION]] = distinct !DICompositeType(tag: DW_TAG_union_type,
 | |
| // CHECK-NOT: name:
 | |
| // CHECK: elements
 | |
| // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "i", scope: ![[UNION]],
 | |
| // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "c", scope: ![[UNION]],
 |