blob: ad3b6d4c623436aa044fab61b1ce074dbc122529 [file] [log] [blame]
Eric Christophercab9fae2014-04-10 05:20:00 +00001// RUN: %clang_cc1 -emit-llvm -gdwarf-4 -triple x86_64-linux-gnu %s -o - | FileCheck %s
2
3// Make sure that we emit a global variable for each of the members of the
4// anonymous union.
5
6static union {
7 int c;
8 int d;
9 union {
10 int a;
11 };
12 struct {
13 int b;
14 };
15};
16
17int test_it() {
18 c = 1;
19 d = 2;
20 a = 4;
21 return (c == 1);
22}
23
Adrian Prantl00820ab2015-04-29 16:52:31 +000024void foo() {
25 union {
26 int i;
27 char c;
28 };
29 i = 8;
30}
31
Duncan P. N. Exon Smith9dd4e4e2015-04-29 16:40:08 +000032// CHECK: [[FILE:.*]] = !DIFile(filename: "{{.*}}debug-info-anon-union-vars.cpp",
33// CHECK: !DIGlobalVariable(name: "c",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
34// CHECK: !DIGlobalVariable(name: "d",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
35// CHECK: !DIGlobalVariable(name: "a",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
36// CHECK: !DIGlobalVariable(name: "b",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true
Adrian Prantl00820ab2015-04-29 16:52:31 +000037// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "i", {{.*}}, flags: DIFlagArtificial
38// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "c", {{.*}}, flags: DIFlagArtificial
39// CHECK: !DILocalVariable(
40// CHECK-NOT: name:
41// CHECK: type: ![[UNION:[0-9]+]]
42// CHECK: ![[UNION]] = !DICompositeType(tag: DW_TAG_union_type,
43// CHECK-NOT: name:
44// CHECK: elements
45// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "i", scope: ![[UNION]],
46// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "c", scope: ![[UNION]],