[llvm] r325234 - [DebugInfo] Accept enumeration types without underlying integer type present in

Momchil Velikov via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 15 05:29:33 PST 2018


Author: chill
Date: Thu Feb 15 05:29:33 2018
New Revision: 325234

URL: http://llvm.org/viewvc/llvm-project?rev=325234&view=rev
Log:
[DebugInfo] Accept enumeration types without underlying integer type present in
debug info metadata

... when generating DWARF.

Differential Revision: https://reviews.llvm.org/D43304

Modified:
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
    llvm/trunk/test/DebugInfo/Generic/debug-info-enum.ll

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=325234&r1=325233&r2=325234&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Thu Feb 15 05:29:33 2018
@@ -1430,11 +1430,11 @@ void DwarfUnit::constructArrayTypeDIE(DI
 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
   const DIType *DTy = resolve(CTy->getBaseType());
   bool IsUnsigned = DTy && isUnsignedDIType(DD, DTy);
-  if (DTy && DD->getDwarfVersion() >= 3)
-    addType(Buffer, DTy);
-  if (DD->getDwarfVersion() >= 4 && (CTy->getFlags() & DINode::FlagFixedEnum)) {
-    assert(DTy);
-    addFlag(Buffer, dwarf::DW_AT_enum_class);
+  if (DTy) {
+    if (DD->getDwarfVersion() >= 3)
+      addType(Buffer, DTy);
+    if (DD->getDwarfVersion() >= 4 && (CTy->getFlags() & DINode::FlagFixedEnum))
+      addFlag(Buffer, dwarf::DW_AT_enum_class);
   }
 
   DINodeArray Elements = CTy->getElements();

Modified: llvm/trunk/test/DebugInfo/Generic/debug-info-enum.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/debug-info-enum.ll?rev=325234&r1=325233&r2=325234&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/Generic/debug-info-enum.ll (original)
+++ llvm/trunk/test/DebugInfo/Generic/debug-info-enum.ll Thu Feb 15 05:29:33 2018
@@ -162,13 +162,26 @@
 !42 = !{!43, !44}
 !43 = !DIEnumerator(name: "A8", value: -128)
 !44 = !DIEnumerator(name: "B8", value: 127)
-!45 = !{!0, !46, !48, !50, !52, !54, !56, !58, !60}
 ; CHECK:         DW_TAG_enumeration_type
 ; CHECK-DW2-NOT:   DW_AT_type
 ; CHECK-DW4:       DW_AT_type{{.*}}"int"
 ; CHECK-NOT:       DW_AT_enum_class
 ; CHECK:           DW_AT_name      ("E8")
 
+; Test enumeration without a fixed underlying type, but with the DIFlagFixedEnum
+; set. The DW_AT_enum_class attribute should be absent. This behaviour is
+; intented to keep compatibilty with existing DWARF consumers, which may imply
+; the type is present whenever DW_AT_enum_class is set.
+!63 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "E9", file: !3, line: 63, size: 32, flags: DIFlagFixedEnum,  elements: !64, identifier: "_ZTS2E9")
+!64 = !{!65, !66}
+!65 = !DIEnumerator(name: "A9", value: -128)
+!66 = !DIEnumerator(name: "B9", value: 127)
+; CHECK:     DW_TAG_enumeration_type
+; CHECK-NOT:   DW_AT_type
+; CHECK-NOT:   DW_AT_enum_class
+; CHECK:       DW_AT_name      ("E9")
+
+!45 = !{!0, !46, !48, !50, !52, !54, !56, !58, !60, !67}
 !46 = !DIGlobalVariableExpression(var: !47, expr: !DIExpression())
 !47 = distinct !DIGlobalVariable(name: "x1", scope: !2, file: !3, line: 12, type: !10, isLocal: false, isDefinition: true)
 !48 = !DIGlobalVariableExpression(var: !49, expr: !DIExpression())
@@ -185,4 +198,6 @@
 !59 = distinct !DIGlobalVariable(name: "x7", scope: !2, file: !3, line: 57, type: !37, isLocal: false, isDefinition: true)
 !60 = !DIGlobalVariableExpression(var: !61, expr: !DIExpression())
 !61 = distinct !DIGlobalVariable(name: "x8", scope: !2, file: !3, line: 63, type: !41, isLocal: false, isDefinition: true)
+!67 = !DIGlobalVariableExpression(var: !68, expr: !DIExpression())
+!68 = distinct !DIGlobalVariable(name: "x9", scope: !2, file: !3, line: 63, type: !63, isLocal: false, isDefinition: true)
 !62 = !{i32 2, !"Debug Info Version", i32 3}




More information about the llvm-commits mailing list