DebugInfo: Use a 64 bit type for the subrange
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 3 Apr 2014 06:28:20 +0000 (06:28 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 3 Apr 2014 06:28:20 +0000 (06:28 +0000)
While we were encoding 64 bit values (data8) in the subrange itself,
using a 32 bit type for the subrange was still confusing the gdb. Oh,
and make it unsigned too.

As the comment points out, this could be pushed into the frontend so
that it would be 32 or 64 bit as appropriate, etc.

llvm-svn: 205512

llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
llvm/test/DebugInfo/X86/empty-array.ll
llvm/test/DebugInfo/X86/nondefault-subrange-array.ll

index 97f2510..82e9bb0 100644 (file)
@@ -1766,12 +1766,12 @@ void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
   // as different languages may have different sizes for indexes.
   DIE *IdxTy = getIndexTyDie();
   if (!IdxTy) {
-    // Construct an anonymous type for index type.
+    // Construct an integer type to use for indexes.
     IdxTy = createAndAddDIE(dwarf::DW_TAG_base_type, *UnitDie);
-    addString(IdxTy, dwarf::DW_AT_name, "int");
-    addUInt(IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int32_t));
+    addString(IdxTy, dwarf::DW_AT_name, "sizetype");
+    addUInt(IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
     addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
-            dwarf::DW_ATE_signed);
+            dwarf::DW_ATE_unsigned);
     setIndexTyDie(IdxTy);
   }
 
index 461b9da..3fab313 100644 (file)
@@ -21,8 +21,8 @@
 ; CHECK: [[BASETYPE]]: DW_TAG_base_type
 ; CHECK: [[BASE2]]: DW_TAG_base_type
 ; CHECK-NEXT: DW_AT_name
-; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1]  (0x04)
-; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1]   (0x05)
+; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1]  (0x08)
+; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1]   (0x07)
 
 !llvm.dbg.cu = !{!0}
 !llvm.module.flags = !{!21}
index b097578..4df1bd4 100644 (file)
@@ -23,9 +23,9 @@
 
 ; CHECK: [[BASE]]: DW_TAG_base_type
 ; CHECK: [[BASE2]]: DW_TAG_base_type
-; CHECK-NEXT:                 DW_AT_name [DW_FORM_strp]       ( .debug_str[0x{{[0-9a-f]*}}] = "int")
-; CHECK-NEXT:                 DW_AT_byte_size [DW_FORM_data1] (0x04)
-; CHECK-NEXT:                 DW_AT_encoding [DW_FORM_data1]  (0x05)
+; CHECK-NEXT:                 DW_AT_name [DW_FORM_strp]       ( .debug_str[0x{{[0-9a-f]*}}] = "sizetype")
+; CHECK-NEXT:                 DW_AT_byte_size [DW_FORM_data1] (0x08)
+; CHECK-NEXT:                 DW_AT_encoding [DW_FORM_data1]  (0x07)
 
 !llvm.dbg.cu = !{!0}
 !llvm.module.flags = !{!21}