PDB/CodeView doesn’t doesn’t distinguish between various flavors of enums<br><div class="gmail_quote"><div dir="ltr">On Mon, Jan 7, 2019 at 8:14 AM Paul Robinson via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">probinson created this revision.<br>
probinson added reviewers: dblaikie, rnk, zturner.<br>
probinson added a project: debug-info.<br>
Herald added subscribers: cfe-commits, JDevlieghere, aprantl.<br>
<br>
The original fix for PR36168 would emit DW_AT_enum_class for both of these cases:<br>
<br>
enum Fixed : short { F1 <<a href="https://reviews.llvm.org/F1" rel="noreferrer" target="_blank">https://reviews.llvm.org/F1</a>> = 1 };<br>
enum class Class { C1 = 1 };<br>
<br>
However, it really should be applied only to the latter case.<br>
<br>
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.<br>
<br>
If not, I'll follow up with NFC name changes so the flag becomes DIFlagEnumClass.<br>
<br>
<br>
Repository:<br>
  rC Clang<br>
<br>
<a href="https://reviews.llvm.org/D56393" rel="noreferrer" target="_blank">https://reviews.llvm.org/D56393</a><br>
<br>
Files:<br>
  clang/lib/CodeGen/CGDebugInfo.cpp<br>
  clang/test/CodeGenCXX/debug-info-enum-class.cpp<br>
<br>
<br>
Index: clang/test/CodeGenCXX/debug-info-enum-class.cpp<br>
===================================================================<br>
--- clang/test/CodeGenCXX/debug-info-enum-class.cpp<br>
+++ clang/test/CodeGenCXX/debug-info-enum-class.cpp<br>
@@ -52,6 +52,7 @@<br>
 // FIXME: this should just be a declaration under -fno-standalone-debug<br>
 // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E"<br>
 // CHECK-SAME:             scope: [[TEST2:![0-9]+]]<br>
+// CHECK-NOT:              DIFlagFixedEnum<br>
 // CHECK-SAME:             elements: [[TEST_ENUMS:![0-9]+]]<br>
 // CHECK-SAME:             identifier: "_ZTSN5test21EE"<br>
 // CHECK: [[TEST2]] = !DINamespace(name: "test2"<br>
@@ -67,6 +68,7 @@<br>
 // FIXME: this should just be a declaration under -fno-standalone-debug<br>
 // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E"<br>
 // CHECK-SAME:             scope: [[TEST3:![0-9]+]]<br>
+// CHECK-NOT:              DIFlagFixedEnum<br>
 // CHECK-SAME:             elements: [[TEST_ENUMS]]<br>
 // CHECK-SAME:             identifier: "_ZTSN5test31EE"<br>
 // CHECK: [[TEST3]] = !DINamespace(name: "test3"<br>
@@ -78,6 +80,7 @@<br>
 namespace test4 {<br>
 // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E"<br>
 // CHECK-SAME:             scope: [[TEST4:![0-9]+]]<br>
+// CHECK-NOT:              DIFlagFixedEnum<br>
 // CHECK-SAME:             elements: [[TEST_ENUMS]]<br>
 // CHECK-SAME:             identifier: "_ZTSN5test41EE"<br>
 // CHECK: [[TEST4]] = !DINamespace(name: "test4"<br>
Index: clang/lib/CodeGen/CGDebugInfo.cpp<br>
===================================================================<br>
--- clang/lib/CodeGen/CGDebugInfo.cpp<br>
+++ clang/lib/CodeGen/CGDebugInfo.cpp<br>
@@ -2711,7 +2711,7 @@<br>
   llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit);<br>
   return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit,<br>
                                         Line, Size, Align, EltArray, ClassTy,<br>
-                                        Identifier, ED->isFixed());<br>
+                                        Identifier, ED->isScoped());<br>
 }<br>
<br>
 llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent,<br>
<br>
<br>
</blockquote></div>