[llvm] r272231 - [codeview] Skip DIGlobalVariables with no variable

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 8 17:29:01 PDT 2016


Author: rnk
Date: Wed Jun  8 19:29:00 2016
New Revision: 272231

URL: http://llvm.org/viewvc/llvm-project?rev=272231&view=rev
Log:
[codeview] Skip DIGlobalVariables with no variable

They have probably been discarded during optimization.

Added:
    llvm/trunk/test/DebugInfo/COFF/globals-discarded.ll
Modified:
    llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp?rev=272231&r1=272230&r2=272231&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp Wed Jun  8 19:29:00 2016
@@ -1317,7 +1317,7 @@ void CodeViewDebug::emitDebugInfoForGlob
     switchToDebugSectionForSymbol(nullptr);
     MCSymbol *EndLabel = nullptr;
     for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
-      if (const auto *GV = dyn_cast<GlobalVariable>(G->getVariable()))
+      if (const auto *GV = dyn_cast_or_null<GlobalVariable>(G->getVariable())) {
         if (!GV->hasComdat()) {
           if (!EndLabel) {
             OS.AddComment("Symbol subsection for globals");
@@ -1325,6 +1325,7 @@ void CodeViewDebug::emitDebugInfoForGlob
           }
           emitDebugInfoForGlobal(G, Asm->getSymbol(GV));
         }
+      }
     }
     if (EndLabel)
       endCVSubsection(EndLabel);
@@ -1332,7 +1333,7 @@ void CodeViewDebug::emitDebugInfoForGlob
     // Second, emit each global that is in a comdat into its own .debug$S
     // section along with its own symbol substream.
     for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
-      if (const auto *GV = dyn_cast<GlobalVariable>(G->getVariable())) {
+      if (const auto *GV = dyn_cast_or_null<GlobalVariable>(G->getVariable())) {
         if (GV->hasComdat()) {
           MCSymbol *GVSym = Asm->getSymbol(GV);
           OS.AddComment("Symbol subsection for " +

Added: llvm/trunk/test/DebugInfo/COFF/globals-discarded.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/globals-discarded.ll?rev=272231&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/globals-discarded.ll (added)
+++ llvm/trunk/test/DebugInfo/COFF/globals-discarded.ll Wed Jun  8 19:29:00 2016
@@ -0,0 +1,35 @@
+; RUN: llc < %s | FileCheck %s
+
+; This tests that we don't emit information about globals that were discarded
+; during optimization. We should only see one global symbol record.
+
+; CHECK: .short  4365                    # Record kind: S_GDATA32
+; CHECK: .long   117                     # Type
+; CHECK: .secrel32       x               # DataOffset
+; CHECK: .secidx x                       # Segment
+; CHECK: .asciz  "x"                     # Name
+; CHECK-NOT: S_GDATA32
+
+; ModuleID = 't.ii'
+source_filename = "t.ii"
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.0"
+
+ at x = global i32 42
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!35, !36, !37}
+!llvm.ident = !{!38}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (trunk 272215) (llvm/trunk 272226)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !3)
+!1 = !DIFile(filename: "t.c", directory: "foo")
+!2 = !{}
+!3 = !{!4, !6}
+!4 = distinct !DIGlobalVariable(name: "_OptionsStorage", scope: !0, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true)
+!5 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
+!6 = distinct !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 4, type: !5, isLocal: true, isDefinition: true, variable: i32* @x)
+
+!35 = !{i32 2, !"CodeView", i32 1}
+!36 = !{i32 2, !"Debug Info Version", i32 3}
+!37 = !{i32 1, !"PIC Level", i32 2}
+!38 = !{!"clang version 3.9.0 (trunk 272215) (llvm/trunk 272226)"}




More information about the llvm-commits mailing list