diff options
20 files changed, 134 insertions, 83 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 433cc3769e..1284d1c922 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -783,6 +783,23 @@ void DwarfDebug::beginModule() { SectionMap[Asm->getObjFileLowering().getTextSection()]; } +void DwarfDebug::finishVariableDefinitions() { + for (const auto &Var : ConcreteVariables) { + DIE *VariableDie = Var->getDIE(); + // FIXME: Consider the time-space tradeoff of just storing the unit pointer + // in the ConcreteVariables list, rather than looking it up again here. + // DIE::getUnit isn't simple - it walks parent pointers, etc. + DwarfCompileUnit *Unit = lookupUnit(VariableDie->getUnit()); + assert(Unit); + DbgVariable *AbsVar = Var->getAbstractVariable(); + if (AbsVar && AbsVar->getDIE()) { + Unit->addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, + *AbsVar->getDIE()); + } else + Unit->applyVariableAttributes(*Var, *VariableDie); + } +} + void DwarfDebug::finishSubprogramDefinitions() { const Module *M = MMI->getModule(); @@ -849,7 +866,9 @@ void DwarfDebug::collectDeadVariables() { DIVariable DV(Variables.getElement(vi)); assert(DV.isVariable()); DbgVariable NewVar(DV, nullptr, this); - SPDIE->addChild(SPCU->constructVariableDIE(NewVar)); + auto VariableDie = SPCU->constructVariableDIE(NewVar); + SPCU->applyVariableAttributes(NewVar, *VariableDie); + SPDIE->addChild(std::move(VariableDie)); } } } @@ -859,6 +878,8 @@ void DwarfDebug::collectDeadVariables() { void DwarfDebug::finalizeModuleInfo() { finishSubprogramDefinitions(); + finishVariableDefinitions(); + // Collect info for variables that were optimized out. collectDeadVariables(); @@ -1126,7 +1147,8 @@ void DwarfDebug::collectVariableInfoFromMMITable( DbgVariable *AbsDbgVariable = findAbstractVariable(DV, Scope->getScopeNode()); - DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable, this); + ConcreteVariables.push_back(make_unique<DbgVariable>(DV, AbsDbgVariable, this)); + DbgVariable *RegVar = ConcreteVariables.back().get(); RegVar->setFrameIndex(VI.Slot); addScopeVariable(Scope, RegVar); } @@ -1194,7 +1216,8 @@ DwarfDebug::collectVariableInfo(SmallPtrSet<const MDNode *, 16> &Processed) { const MachineInstr *MInsn = Ranges.front().first; assert(MInsn->isDebugValue() && "History must begin with debug value"); DbgVariable *AbsVar = findAbstractVariable(DV, Scope->getScopeNode()); - DbgVariable *RegVar = new DbgVariable(MInsn, AbsVar, this); + ConcreteVariables.push_back(make_unique<DbgVariable>(MInsn, AbsVar, this)); + DbgVariable *RegVar = ConcreteVariables.back().get(); addScopeVariable(Scope, RegVar); // Check if the first DBG_VALUE is valid for the rest of the function. @@ -1250,9 +1273,9 @@ DwarfDebug::collectVariableInfo(SmallPtrSet<const MDNode *, 16> &Processed) { if (!Processed.insert(DV)) continue; if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext())) { - auto *RegVar = new DbgVariable( - DV, findAbstractVariable(DV, Scope->getScopeNode()), this); - addScopeVariable(Scope, RegVar); + ConcreteVariables.push_back(make_unique<DbgVariable>( + DV, findAbstractVariable(DV, Scope->getScopeNode()), this)); + addScopeVariable(Scope, ConcreteVariables.back().get()); } } } @@ -1554,12 +1577,8 @@ void DwarfDebug::endFunction(const MachineFunction *MF) { // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the // DbgVariables except those that are also in AbstractVariables (since they // can be used cross-function) - for (const auto &I : ScopeVariables) - for (const auto *Var : I.second) - if (!AbstractVariables.count(Var->getVariable()) || Var->getAbstractVariable()) - delete Var; ScopeVariables.clear(); - DeleteContainerPointers(CurrentFnArguments); + CurrentFnArguments.clear(); DbgValues.clear(); LabelsBeforeInsn.clear(); LabelsAfterInsn.clear(); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 165eb5a2da..fcc9a7c80d 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -209,6 +209,7 @@ class DwarfDebug : public AsmPrinterHandler { // Collection of abstract variables. DenseMap<const MDNode *, std::unique_ptr<DbgVariable>> AbstractVariables; + SmallVector<std::unique_ptr<DbgVariable>, 64> ConcreteVariables; // Collection of DebugLocEntry. Stored in a linked list so that DIELocLists // can refer to them in spite of insertions into this list. @@ -402,6 +403,8 @@ class DwarfDebug : public AsmPrinterHandler { /// \brief Collect info for variables that were optimized out. void collectDeadVariables(); + void finishVariableDefinitions(); + void finishSubprogramDefinitions(); /// \brief Finish off debug information after all functions have been diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 769ce9de64..9538bee7bc 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1514,6 +1514,17 @@ void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie) { addFlag(SPDie, dwarf::DW_AT_explicit); } +void DwarfUnit::applyVariableAttributes(const DbgVariable &Var, + DIE &VariableDie) { + StringRef Name = Var.getName(); + if (!Name.empty()) + addString(VariableDie, dwarf::DW_AT_name, Name); + addSourceLine(VariableDie, Var.getVariable()); + addType(VariableDie, Var.getType()); + if (Var.isArtificial()) + addFlag(VariableDie, dwarf::DW_AT_artificial); +} + // Return const expression if value is a GEP to access merged global // constant. e.g. // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0) @@ -1787,24 +1798,13 @@ std::unique_ptr<DIE> DwarfUnit::constructVariableDIE(DbgVariable &DV, std::unique_ptr<DIE> DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV, bool Abstract) { - StringRef Name = DV.getName(); - // Define variable debug information entry. auto VariableDie = make_unique<DIE>(DV.getTag()); - DbgVariable *AbsVar = DV.getAbstractVariable(); - if (AbsVar && AbsVar->getDIE()) { - addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, *AbsVar->getDIE()); - } else { - if (!Name.empty()) - addString(*VariableDie, dwarf::DW_AT_name, Name); - addSourceLine(*VariableDie, DV.getVariable()); - addType(*VariableDie, DV.getType()); - if (DV.isArtificial()) - addFlag(*VariableDie, dwarf::DW_AT_artificial); - } - if (Abstract) + if (Abstract) { + applyVariableAttributes(DV, *VariableDie); return VariableDie; + } // Add variable address. diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index 71034442b2..b7b83b282d 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -401,6 +401,7 @@ public: void applySubprogramAttributes(DISubprogram SP, DIE &SPDie); void applySubprogramAttributesToDefinition(DISubprogram SP, DIE &SPDie); + void applyVariableAttributes(const DbgVariable &Var, DIE &VariableDie); /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the /// given DIType. diff --git a/test/CodeGen/X86/2011-01-24-DbgValue-Before-Use.ll b/test/CodeGen/X86/2011-01-24-DbgValue-Before-Use.ll index f0165284b1..625a35161c 100644 --- a/test/CodeGen/X86/2011-01-24-DbgValue-Before-Use.ll +++ b/test/CodeGen/X86/2011-01-24-DbgValue-Before-Use.ll @@ -8,11 +8,11 @@ target triple = "x86_64-apple-darwin10.0.0" ; CHECK: DW_TAG_subprogram ; CHECK: DW_TAG_variable ; CHECK: DW_TAG_variable +; CHECK-NEXT: DW_AT_location ; CHECK-NEXT: DW_AT_name {{.*}} "z_s" ; CHECK-NEXT: DW_AT_decl_file ; CHECK-NEXT: DW_AT_decl_line ; CHECK-NEXT: DW_AT_type{{.*}}{[[TYPE:.*]]} -; CHECK-NEXT: DW_AT_location ; CHECK: [[TYPE]]: ; CHECK-NEXT: DW_AT_name {{.*}} "int" diff --git a/test/DebugInfo/SystemZ/variable-loc.ll b/test/DebugInfo/SystemZ/variable-loc.ll index e0e4156d39..23df1cb555 100644 --- a/test/DebugInfo/SystemZ/variable-loc.ll +++ b/test/DebugInfo/SystemZ/variable-loc.ll @@ -14,11 +14,11 @@ ; CHECK: brasl %r14, populate_array@PLT ; DEBUG: DW_TAG_variable -; DEBUG-NOT: DW_TAG -; DEBUG: DW_AT_name {{.*}} "main_arr" ; Rather hard-coded, but 0x91 => DW_OP_fbreg and 0xa401 is SLEB128 encoded 164. ; DEBUG-NOT: DW_TAG ; DEBUG: DW_AT_location {{.*}}(<0x3> 91 a4 01 ) +; DEBUG-NOT: DW_TAG +; DEBUG: DW_AT_name {{.*}} "main_arr" @.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 2 diff --git a/test/DebugInfo/X86/DW_AT_location-reference.ll b/test/DebugInfo/X86/DW_AT_location-reference.ll index 6c5e32c093..f31b0ad325 100644 --- a/test/DebugInfo/X86/DW_AT_location-reference.ll +++ b/test/DebugInfo/X86/DW_AT_location-reference.ll @@ -31,11 +31,11 @@ ; // The 'x' variable and its symbol reference location ; CHECK: .debug_info contents: ; CHECK: DW_TAG_variable +; CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x00000000) ; CHECK-NEXT: DW_AT_name {{.*}} "x" ; CHECK-NEXT: DW_AT_decl_file ; CHECK-NEXT: DW_AT_decl_line ; CHECK-NEXT: DW_AT_type -; CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x00000000) ; Check that the location contains only 4 ranges - this verifies that the 4th ; and 5th ranges were successfully merged into a single range. diff --git a/test/DebugInfo/X86/dbg-const-int.ll b/test/DebugInfo/X86/dbg-const-int.ll index f2f51c9b0f..bf7ee08c66 100644 --- a/test/DebugInfo/X86/dbg-const-int.ll +++ b/test/DebugInfo/X86/dbg-const-int.ll @@ -1,12 +1,14 @@ -; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj %s -o %t -; RUN: llvm-dwarfdump %t | FileCheck %s +; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj < %s \ +; RUN: | llvm-dwarfdump -debug-dump=info - | FileCheck %s target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-macosx10.6.7" ; Radar 9511391 ; CHECK: DW_TAG_variable -; CHECK: "i" -; CHECK: DW_AT_const_value [DW_FORM_sdata] (42) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_const_value [DW_FORM_sdata] (42) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "i" define i32 @foo() nounwind uwtable readnone optsize ssp { entry: diff --git a/test/DebugInfo/X86/dbg-value-const-byref.ll b/test/DebugInfo/X86/dbg-value-const-byref.ll index baba0cdb31..23fa3520a7 100644 --- a/test/DebugInfo/X86/dbg-value-const-byref.ll +++ b/test/DebugInfo/X86/dbg-value-const-byref.ll @@ -20,9 +20,10 @@ ; ; CHECK: .debug_info contents: ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name{{.*}}"i" ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_location [DW_FORM_data4] ([[LOC:.*]]) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"i" ; CHECK: .debug_loc contents: ; CHECK: [[LOC]]: ; consts 0x00000003 diff --git a/test/DebugInfo/X86/dbg-value-location.ll b/test/DebugInfo/X86/dbg-value-location.ll index 9184217b18..55d1ae6a9f 100644 --- a/test/DebugInfo/X86/dbg-value-location.ll +++ b/test/DebugInfo/X86/dbg-value-location.ll @@ -6,11 +6,11 @@ target triple = "x86_64-apple-darwin10.0.0" ; rdar://8950491 ;CHECK: DW_TAG_formal_parameter +;CHECK-NEXT: DW_AT_location ;CHECK-NEXT: DW_AT_name {{.*}} "var" ;CHECK-NEXT: DW_AT_decl_file ;CHECK-NEXT: DW_AT_decl_line ;CHECK-NEXT: DW_AT_type -;CHECK-NEXT: DW_AT_location @dfm = external global i32, align 4 diff --git a/test/DebugInfo/X86/debug-info-block-captured-self.ll b/test/DebugInfo/X86/debug-info-block-captured-self.ll index 87e8f03d26..d753cc0f41 100644 --- a/test/DebugInfo/X86/debug-info-block-captured-self.ll +++ b/test/DebugInfo/X86/debug-info-block-captured-self.ll @@ -7,17 +7,19 @@ ; This test is split into two parts, the frontend part can be found at ; llvm/tools/clang/test/CodeGenObjC/debug-info-block-captured-self.m ; -; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} -; CHECK: DW_TAG_variable -; CHECK: {{.*}}DW_AT_name{{.*}}"self"{{.*}} +; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} +; CHECK: DW_TAG_variable ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_location +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"self"{{.*}} ; -; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} -; CHECK: DW_TAG_variable -; CHECK: {{.*}}DW_AT_name{{.*}}"self"{{.*}} +; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} +; CHECK: DW_TAG_variable ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_location +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"self"{{.*}} ; ; Generated (and then reduced) from ; ---------------------------------------------------------------------- diff --git a/test/DebugInfo/X86/debug-info-blocks.ll b/test/DebugInfo/X86/debug-info-blocks.ll index 430c157581..db1143cfa3 100644 --- a/test/DebugInfo/X86/debug-info-blocks.ll +++ b/test/DebugInfo/X86/debug-info-blocks.ll @@ -20,22 +20,23 @@ ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_formal_parameter ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name{{.*}}.block_descriptor -; CHECK-NOT: DW_TAG ; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}.block_descriptor ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name{{.*}}"self" -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_type{{.*}}{[[APTR:.*]]} -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_artificial ; CHECK-NOT: DW_TAG ; 0x06 = DW_OP_deref ; 0x23 = DW_OP_uconst ; 0x91 = DW_OP_fbreg ; CHECK: DW_AT_location{{.*}}91 {{[0-9]+}} 06 23 {{[0-9]+}} ) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"self" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_type{{.*}}{[[APTR:.*]]} +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_artificial ; CHECK: [[APTR]]: DW_TAG_pointer_type ; CHECK-NEXT: {[[A]]} diff --git a/test/DebugInfo/X86/debug-loc-offset.ll b/test/DebugInfo/X86/debug-loc-offset.ll index 244aa53aa4..7866d0eac5 100644 --- a/test/DebugInfo/X86/debug-loc-offset.ll +++ b/test/DebugInfo/X86/debug-loc-offset.ll @@ -44,8 +44,10 @@ ; CHECK: DW_AT_MIPS_linkage_name [DW_FORM_strp]{{.*}}"_Z3baz1A" ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name [DW_FORM_strp]{{.*}}"a" +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_location [DW_FORM_sec_offset] (0x00000000) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp]{{.*}}"a" ; CHECK: DW_TAG_variable ; CHECK: DW_AT_location [DW_FORM_exprloc] diff --git a/test/DebugInfo/X86/empty-and-one-elem-array.ll b/test/DebugInfo/X86/empty-and-one-elem-array.ll index 974bd73479..f5c37df1e5 100644 --- a/test/DebugInfo/X86/empty-and-one-elem-array.ll +++ b/test/DebugInfo/X86/empty-and-one-elem-array.ll @@ -28,6 +28,11 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; An empty array should not have an AT_upper_bound attribute. But an array of 1 ; should. +; CHECK: DW_TAG_base_type +; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "int") +; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (0x05) +; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04) + ; int foo::b[1]: ; CHECK: DW_TAG_structure_type ; CHECK: DW_AT_name{{.*}}"foo" @@ -36,11 +41,6 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "b") ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] -; CHECK: DW_TAG_base_type -; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "int") -; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (0x05) -; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04) - ; int[1]: ; CHECK: DW_TAG_array_type [{{.*}}] * ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] diff --git a/test/DebugInfo/X86/misched-dbg-value.ll b/test/DebugInfo/X86/misched-dbg-value.ll index 478f221d3f..c713e65110 100644 --- a/test/DebugInfo/X86/misched-dbg-value.ll +++ b/test/DebugInfo/X86/misched-dbg-value.ll @@ -6,20 +6,33 @@ ; function parameters. ; CHECK: .debug_info contents: ; CHECK: DW_TAG_compile_unit -; CHECK: DW_TAG_subprogram -; CHECK: Proc8 -; CHECK: DW_TAG_formal_parameter -; CHECK: Array1Par -; CHECK: DW_AT_location -; CHECK: DW_TAG_formal_parameter -; CHECK: Array2Par -; CHECK: DW_AT_location -; CHECK: DW_TAG_formal_parameter -; CHECK: IntParI1 -; CHECK: DW_AT_location -; CHECK: DW_TAG_formal_parameter -; CHECK: IntParI2 -; CHECK: DW_AT_location +; CHECK: DW_TAG_subprogram +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "Proc8" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "Array1Par" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "Array2Par" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "IntParI1" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "IntParI2" %struct.Record = type { %struct.Record*, i32, i32, i32, [31 x i8] } diff --git a/test/DebugInfo/X86/op_deref.ll b/test/DebugInfo/X86/op_deref.ll index 810ebbc09a..59382d19f1 100644 --- a/test/DebugInfo/X86/op_deref.ll +++ b/test/DebugInfo/X86/op_deref.ll @@ -1,18 +1,21 @@ -; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj -; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DW-CHECK -; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj -dwarf-version=3 -; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DWARF3 +; RUN: llc -O0 -mtriple=x86_64-apple-darwin < %s -filetype=obj \ +; RUN: | llvm-dwarfdump -debug-dump=info - \ +; RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=DWARF4 +; RUN: llc -O0 -mtriple=x86_64-apple-darwin < %s -filetype=obj -dwarf-version=3 \ +; RUN: | llvm-dwarfdump -debug-dump=info - \ +; RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=DWARF3 -; DW-CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") ; FIXME: The location here needs to be fixed, but llvm-dwarfdump doesn't handle ; DW_AT_location lists yet. -; DW-CHECK: DW_AT_location [DW_FORM_sec_offset] (0x00000000) +; DWARF4: DW_AT_location [DW_FORM_sec_offset] (0x00000000) -; DWARF3: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") ; FIXME: The location here needs to be fixed, but llvm-dwarfdump doesn't handle ; DW_AT_location lists yet. ; DWARF3: DW_AT_location [DW_FORM_data4] (0x00000000) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") + ; Unfortunately llvm-dwarfdump can't unparse a list of DW_AT_locations ; right now, so we check the asm output: ; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o - -filetype=asm | FileCheck %s -check-prefix=ASM-CHECK diff --git a/test/DebugInfo/X86/parameters.ll b/test/DebugInfo/X86/parameters.ll index 8248cf63c4..4215c21721 100644 --- a/test/DebugInfo/X86/parameters.ll +++ b/test/DebugInfo/X86/parameters.ll @@ -23,13 +23,15 @@ ; } ; CHECK: debug_info contents -; CHECK: DW_AT_name{{.*}} = "f" ; 0x74 is DW_OP_breg4, showing that the parameter is accessed indirectly ; (with a zero offset) from the register parameter ; CHECK: DW_AT_location{{.*}}(<0x0{{.}}> 74 00 +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}} = "f" -; CHECK: DW_AT_name{{.*}} = "g" ; CHECK: DW_AT_location{{.*}}([[G_LOC:0x[0-9]*]]) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}} = "g" ; CHECK: debug_loc contents ; CHECK-NEXT: [[G_LOC]]: Beginning ; CHECK-NEXT: Ending diff --git a/test/DebugInfo/X86/sret.ll b/test/DebugInfo/X86/sret.ll index fed4334c27..faf5158384 100644 --- a/test/DebugInfo/X86/sret.ll +++ b/test/DebugInfo/X86/sret.ll @@ -3,8 +3,8 @@ ; Based on the debuginfo-tests/sret.cpp code. -; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x72aabf538392d298) -; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x72aabf538392d298) +; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x5b59949640ec1580) +; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x5b59949640ec1580) %class.A = type { i32 (...)**, i32 } %class.B = type { i8 } diff --git a/test/DebugInfo/cross-cu-inlining.ll b/test/DebugInfo/cross-cu-inlining.ll index 266a24ddc6..899558a0b8 100644 --- a/test/DebugInfo/cross-cu-inlining.ll +++ b/test/DebugInfo/cross-cu-inlining.ll @@ -56,8 +56,9 @@ ; CHECK: DW_AT_abstract_origin {{.*}} {0x[[ABS_FUNC]]} ; CHECK: DW_TAG_formal_parameter ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_abstract_origin {{.*}} {0x[[ABS_VAR]]} ; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_abstract_origin {{.*}} {0x[[ABS_VAR]]} @i = external global i32 diff --git a/test/DebugInfo/dead-argument-order.ll b/test/DebugInfo/dead-argument-order.ll index 921a973090..ea805a4872 100644 --- a/test/DebugInfo/dead-argument-order.ll +++ b/test/DebugInfo/dead-argument-order.ll @@ -28,8 +28,9 @@ ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_formal_parameter ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name {{.*}} "i" ; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "i" %struct.S = type { i32 } |