[PATCH] D45445: [CodeGen/AccelTable] Add the "sizetype" synthetic type to the accelerator table

Pavel Labath via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 9 09:11:17 PDT 2018


labath created this revision.
labath added reviewers: JDevlieghere, aprantl, dblaikie.

This type is created on-demand and used as the base type for array
ranges. Since it is "special", its construction did not go through the
createTypeDIE function and so it was never inserted into the accelerator
table, although it clearly belongs there.

I add an explicit addAccelType call to insert it into the table.


Repository:
  rL LLVM

https://reviews.llvm.org/D45445

Files:
  lib/CodeGen/AsmPrinter/DwarfUnit.cpp
  test/DebugInfo/Generic/debug-names-index-type.ll


Index: test/DebugInfo/Generic/debug-names-index-type.ll
===================================================================
--- /dev/null
+++ test/DebugInfo/Generic/debug-names-index-type.ll
@@ -0,0 +1,38 @@
+; REQUIRES: object-emission
+; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
+; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
+; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
+
+; Check that the entry for the "sizetype" index type is present in the
+; accelerator table.
+; CHECK: String: 0x{{[0-9a-f]*}} "sizetype"
+; CHECK-NEXT: Entry
+; CHECK-NEXT: Abbrev
+; CHECK-NEXT: Tag: DW_TAG_base_type
+
+; VERIFY: No errors.
+
+; Generated by:
+; clang -g -x c - -o - -S -emit-llvm <<<"int a[1];"
+
+ at a = common dso_local global [1 x i32] zeroinitializer, align 4, !dbg !0
+
+!llvm.dbg.cu = !{!2}
+!llvm.module.flags = !{!11, !12, !13}
+!llvm.ident = !{!14}
+
+!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
+!1 = distinct !DIGlobalVariable(name: "a", scope: !2, file: !6, line: 1, type: !7, isLocal: false, isDefinition: true)
+!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 7.0.0 (trunk 329543) (llvm/trunk 329575)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)
+!3 = !DIFile(filename: "-", directory: "/tmp")
+!4 = !{}
+!5 = !{!0}
+!6 = !DIFile(filename: "<stdin>", directory: "/tmp")
+!7 = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, size: 32, elements: !9)
+!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!9 = !{!10}
+!10 = !DISubrange(count: 1)
+!11 = !{i32 2, !"Dwarf Version", i32 4}
+!12 = !{i32 2, !"Debug Info Version", i32 3}
+!13 = !{i32 1, !"wchar_size", i32 4}
+!14 = !{!"clang version 7.0.0 (trunk 329543) (llvm/trunk 329575)"}
Index: lib/CodeGen/AsmPrinter/DwarfUnit.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -1404,10 +1404,12 @@
     return IndexTyDie;
   // Construct an integer type to use for indexes.
   IndexTyDie = &createAndAddDIE(dwarf::DW_TAG_base_type, getUnitDie());
-  addString(*IndexTyDie, dwarf::DW_AT_name, "sizetype");
+  StringRef Name = "sizetype";
+  addString(*IndexTyDie, dwarf::DW_AT_name, Name);
   addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
   addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
           dwarf::DW_ATE_unsigned);
+  DD->addAccelType(Name, *IndexTyDie, /*Flags*/ 0);
   return IndexTyDie;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45445.141669.patch
Type: text/x-patch
Size: 2601 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180409/06a5e3c3/attachment.bin>


More information about the llvm-commits mailing list