diff options
| author | Adrian Prantl <aprantl@apple.com> | 2016-01-19 18:02:47 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2016-01-19 18:02:47 +0000 |
| commit | e5238d2a82448674567cb47f7ca0486f36c028a9 (patch) | |
| tree | 00be5bed8c158470407fb4b6baf98c30289586b2 /clang/test/Modules | |
| parent | b541a3488fe5713ce2b32c0ae3dda15ee7984b26 (diff) | |
| download | bcm5719-llvm-e5238d2a82448674567cb47f7ca0486f36c028a9.tar.gz bcm5719-llvm-e5238d2a82448674567cb47f7ca0486f36c028a9.zip | |
Module Debugging: Defer the emission of anonymous tag decls
until we are visiting their declcontext.
This fixes a regression introduced in r256962:
When building debug info for a typdef'd anonymous tag type, we would be
visiting the inner anonymous type first thus creating a "typedef changes
linkage of anonymous type, but linkage was already computed" error.
rdar://problem/24199640
llvm-svn: 258152
Diffstat (limited to 'clang/test/Modules')
| -rw-r--r-- | clang/test/Modules/ExtDebugInfo.cpp | 11 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/DebugCXX.h | 4 | ||||
| -rw-r--r-- | clang/test/Modules/ModuleDebugInfo.cpp | 12 |
3 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/Modules/ExtDebugInfo.cpp b/clang/test/Modules/ExtDebugInfo.cpp index b255042cbfe..b0bca88b89e 100644 --- a/clang/test/Modules/ExtDebugInfo.cpp +++ b/clang/test/Modules/ExtDebugInfo.cpp @@ -35,6 +35,10 @@ enum { auto anon_enum = DebugCXX::e2; char _anchor = anon_enum + conflicting_uid; +TypedefUnion tdu; +TypedefEnum tde; +TypedefStruct tds; + // CHECK: ![[NS:.*]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]], // CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX @@ -62,6 +66,13 @@ char _anchor = anon_enum + conflicting_uid; // CHECK-SAME: flags: DIFlagFwdDecl, // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIfNS_6traitsIfEEEE") +// CHECK: !DICompositeType(tag: DW_TAG_union_type, +// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS12TypedefUnion") +// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, +// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS11TypedefEnum") +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, +// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS13TypedefStruct") + // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member", // CHECK-SAME: scope: !"_ZTSN8DebugCXX6StructE" diff --git a/clang/test/Modules/Inputs/DebugCXX.h b/clang/test/Modules/Inputs/DebugCXX.h index b6a52579fc3..285e094171c 100644 --- a/clang/test/Modules/Inputs/DebugCXX.h +++ b/clang/test/Modules/Inputs/DebugCXX.h @@ -58,3 +58,7 @@ class FwdVirtual { }; struct PureForwardDecl; + +typedef union { int i; } TypedefUnion; +typedef enum { e0 = 0 } TypedefEnum; +typedef struct { int i; } TypedefStruct; diff --git a/clang/test/Modules/ModuleDebugInfo.cpp b/clang/test/Modules/ModuleDebugInfo.cpp index bbe36cb225d..c1248fd4d8e 100644 --- a/clang/test/Modules/ModuleDebugInfo.cpp +++ b/clang/test/Modules/ModuleDebugInfo.cpp @@ -28,6 +28,10 @@ // CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE") // CHECK: !DINamespace(name: "DebugCXX" +// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, +// CHECK-SAME-NOT: name: +// CHECK-SAME: identifier: "_ZTS11TypedefEnum") + // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "Struct" // CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE") @@ -47,6 +51,14 @@ // CHECK-SAME: identifier: "_ZTS10FwdVirtual") // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$FwdVirtual" +// CHECK: !DICompositeType(tag: DW_TAG_union_type, +// CHECK-SAME-NOT: name: +// CHECK-SAME: identifier: "_ZTS12TypedefUnion") + +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, +// CHECK-SAME-NOT: name: +// CHECK-SAME: identifier: "_ZTS13TypedefStruct") + // CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "FloatInstatiation" // no mangled name here yet. |

