probinson created this revision. probinson added reviewers: dblaikie, rnk, zturner. probinson added a project: debug-info. Herald added subscribers: cfe-commits, JDevlieghere, aprantl.
The original fix for PR36168 would emit DW_AT_enum_class for both of these cases: enum Fixed : short { F1 <https://reviews.llvm.org/F1> = 1 }; enum class Class { C1 = 1 }; However, it really should be applied only to the latter case. I'd just do this, except I'm not sure whether PDB cares about this difference. If it does, let me know and I guess we'll have to invent a new flag so the DWARF and PDB generators can each DTRT. If not, I'll follow up with NFC name changes so the flag becomes DIFlagEnumClass. Repository: rC Clang https://reviews.llvm.org/D56393 Files: clang/lib/CodeGen/CGDebugInfo.cpp clang/test/CodeGenCXX/debug-info-enum-class.cpp Index: clang/test/CodeGenCXX/debug-info-enum-class.cpp =================================================================== --- clang/test/CodeGenCXX/debug-info-enum-class.cpp +++ clang/test/CodeGenCXX/debug-info-enum-class.cpp @@ -52,6 +52,7 @@ // FIXME: this should just be a declaration under -fno-standalone-debug // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" // CHECK-SAME: scope: [[TEST2:![0-9]+]] +// CHECK-NOT: DIFlagFixedEnum // CHECK-SAME: elements: [[TEST_ENUMS:![0-9]+]] // CHECK-SAME: identifier: "_ZTSN5test21EE" // CHECK: [[TEST2]] = !DINamespace(name: "test2" @@ -67,6 +68,7 @@ // FIXME: this should just be a declaration under -fno-standalone-debug // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" // CHECK-SAME: scope: [[TEST3:![0-9]+]] +// CHECK-NOT: DIFlagFixedEnum // CHECK-SAME: elements: [[TEST_ENUMS]] // CHECK-SAME: identifier: "_ZTSN5test31EE" // CHECK: [[TEST3]] = !DINamespace(name: "test3" @@ -78,6 +80,7 @@ namespace test4 { // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" // CHECK-SAME: scope: [[TEST4:![0-9]+]] +// CHECK-NOT: DIFlagFixedEnum // CHECK-SAME: elements: [[TEST_ENUMS]] // CHECK-SAME: identifier: "_ZTSN5test41EE" // CHECK: [[TEST4]] = !DINamespace(name: "test4" Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -2711,7 +2711,7 @@ llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit); return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit, Line, Size, Align, EltArray, ClassTy, - Identifier, ED->isFixed()); + Identifier, ED->isScoped()); } llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent,
Index: clang/test/CodeGenCXX/debug-info-enum-class.cpp =================================================================== --- clang/test/CodeGenCXX/debug-info-enum-class.cpp +++ clang/test/CodeGenCXX/debug-info-enum-class.cpp @@ -52,6 +52,7 @@ // FIXME: this should just be a declaration under -fno-standalone-debug // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" // CHECK-SAME: scope: [[TEST2:![0-9]+]] +// CHECK-NOT: DIFlagFixedEnum // CHECK-SAME: elements: [[TEST_ENUMS:![0-9]+]] // CHECK-SAME: identifier: "_ZTSN5test21EE" // CHECK: [[TEST2]] = !DINamespace(name: "test2" @@ -67,6 +68,7 @@ // FIXME: this should just be a declaration under -fno-standalone-debug // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" // CHECK-SAME: scope: [[TEST3:![0-9]+]] +// CHECK-NOT: DIFlagFixedEnum // CHECK-SAME: elements: [[TEST_ENUMS]] // CHECK-SAME: identifier: "_ZTSN5test31EE" // CHECK: [[TEST3]] = !DINamespace(name: "test3" @@ -78,6 +80,7 @@ namespace test4 { // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" // CHECK-SAME: scope: [[TEST4:![0-9]+]] +// CHECK-NOT: DIFlagFixedEnum // CHECK-SAME: elements: [[TEST_ENUMS]] // CHECK-SAME: identifier: "_ZTSN5test41EE" // CHECK: [[TEST4]] = !DINamespace(name: "test4" Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -2711,7 +2711,7 @@ llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit); return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit, Line, Size, Align, EltArray, ClassTy, - Identifier, ED->isFixed()); + Identifier, ED->isScoped()); } llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits