diff options
| author | Devang Patel <dpatel@apple.com> | 2009-11-06 01:30:04 +0000 |
|---|---|---|
| committer | Devang Patel <dpatel@apple.com> | 2009-11-06 01:30:04 +0000 |
| commit | 06ce6506d2db3c42a8609d4746052fddca7e829b (patch) | |
| tree | 16507731b3893108d9fbd6df17c3b84b38c201dd | |
| parent | ad8b22269efc89858f1ef2bf0ba35e9a12f1d26d (diff) | |
| download | bcm5719-llvm-06ce6506d2db3c42a8609d4746052fddca7e829b.tar.gz bcm5719-llvm-06ce6506d2db3c42a8609d4746052fddca7e829b.zip | |
Do not try to emit debug info entry for dead global variable.
llvm-svn: 86212
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 7 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/2009-11-05-DeadGlobalVariable.ll | 17 |
2 files changed, 23 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 1372fc21685..6b54e618c3d 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1097,6 +1097,10 @@ DIE *DwarfDebug::ConstructEnumTypeDIE(CompileUnit *DW_Unit, DIEnumerator *ETy) { /// CreateGlobalVariableDIE - Create new DIE using GV. DIE *DwarfDebug::CreateGlobalVariableDIE(CompileUnit *DW_Unit, const DIGlobalVariable &GV) { + // If the global variable was optmized out then no need to create debug info entry. + if (!GV.getGlobal()) + return NULL; + DIE *GVDie = new DIE(dwarf::DW_TAG_variable); AddString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, GV.getDisplayName()); @@ -1518,7 +1522,8 @@ void DwarfDebug::ConstructFunctionDbgScope(DbgScope *RootScope, DIGlobalVariable GV(N); if (GV.getContext().getNode() == RootScope->getDesc().getNode()) { DIE *ScopedGVDie = CreateGlobalVariableDIE(ModuleCU, GV); - SPDie->AddChild(ScopedGVDie); + if (ScopedGVDie) + SPDie->AddChild(ScopedGVDie); } } } diff --git a/llvm/test/DebugInfo/2009-11-05-DeadGlobalVariable.ll b/llvm/test/DebugInfo/2009-11-05-DeadGlobalVariable.ll new file mode 100644 index 00000000000..c7838c54884 --- /dev/null +++ b/llvm/test/DebugInfo/2009-11-05-DeadGlobalVariable.ll @@ -0,0 +1,17 @@ +; RUN: llc %s -o /dev/null +; Here variable bar is optimzied away. Do not trip over while trying to generate debug info. + +define i32 @foo() nounwind readnone optsize ssp { +entry: + ret i32 42, !dbg !6 +} + +!llvm.dbg.gv = !{!0} + +!0 = metadata !{i32 458804, i32 0, metadata !1, metadata !"foo.bar", metadata !"foo.bar", metadata !"foo.bar", metadata !2, i32 3, metadata !5, i1 true, i1 true, null}; [DW_TAG_variable ] +!1 = metadata !{i32 458798, i32 0, metadata !2, metadata !"foo", metadata !"foo", metadata !"foo", metadata !2, i32 2, metadata !3, i1 false, i1 true}; [DW_TAG_subprogram ] +!2 = metadata !{i32 458769, i32 0, i32 12, metadata !"st.c", metadata !"/private/tmp", metadata !"clang 1.1", i1 true, i1 true, metadata !"", i32 0}; [DW_TAG_compile_unit ] +!3 = metadata !{i32 458773, metadata !2, metadata !"", null, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !4, i32 0}; [DW_TAG_subroutine_type ] +!4 = metadata !{metadata !5} +!5 = metadata !{i32 458788, metadata !2, metadata !"int", metadata !2, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5}; [DW_TAG_base_type ] +!6 = metadata !{i32 5, i32 1, metadata !1, null} |

