Reland [DwarfDebug] Move emission of global vars, types and imports to endModule()

This patch proposes to move emission of global variables, types,
imported entities, etc from DwarfDebug::beginModule() to DwarfDebug::endModule().
Effectively, this changes nothing but the order of debug entities which
will be as follows:
* subprograms (including related context, local variables/labels,
  local imported entities; related types can be created as a part of
  the emission of local entities of an abstract subprogram);
* global variables (including related context and types);
* retained types and enums;
* non-local-scoped imported entities;
* basic types;
* other types left (as a part of local variables attributes emission).

Note that the order of emitted compile units may also be changed as now we emit
units that contain subprograms first and then all other non-empty units.

The motivation behind this change is the following:
(1) DwarfDebug::beginModule() is run at the very beginning of backend's pipeline,
    from this time IR can be significantly changed by target-specific passes.
    If it happens for debug metadata of global entities, those changes will not
    be reflected in the emitted DWARF.
(2) imported subprogram names should refer to an abstract subprogram if it exists,
    but it isn't known in DwarfDebug::beginModule() (it's possible to make some
    guesses based on location info, but it's not quite reliable);
(3) aforementioned entities if they are scoped within a bracketed block
    (subject of D113741) couldn't be emitted in DwarfDebug::beginModule()
    (they need parent emitted first). Another problem is if to try to gather
    some information about local entities and defer their emission
    (till subprogram's processing or DwarfDebug::endModule()) all the gathered
    details might be irrelevant / invalid by the time the entities are being
    emitted (because of (1)).

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D114705
This commit is contained in:
Kristina Bessonova 2021-12-04 14:08:10 +02:00
parent f37d9b4112
commit 0ac75e82ff
46 changed files with 7040 additions and 7026 deletions

View File

@ -44,9 +44,23 @@ CHECK-NEXT: DW_AT_producer ("clang version 7.0.0 (trunk {{.*}})")
CHECK-NEXT: DW_AT_language (DW_LANG_C99)
CHECK-NEXT: DW_AT_name ("hi_foo.c")
CHECK: DW_TAG_subprogram
CHECK-NEXT: DW_AT_low_pc
CHECK-NEXT: DW_AT_high_pc
CHECK-NEXT: DW_AT_frame_base
CHECK-NEXT: DW_AT_name ("foo")
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
CHECK-NEXT: DW_AT_decl_line (3)
CHECK: DW_TAG_formal_parameter
CHECK-NEXT: DW_AT_location (DW_OP_WASM_location 0x0 0x0, DW_OP_stack_value)
CHECK-NEXT: DW_AT_name ("p")
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
CHECK-NEXT: DW_AT_decl_line (3)
CHECK: DW_TAG_variable
CHECK-NEXT: DW_AT_name ("y")
CHECK-NEXT: DW_AT_type (0x000000ac "int[2]")
CHECK-NEXT: DW_AT_type (0x000000d4 "int[2]")
CHECK-NEXT: DW_AT_external (true)
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
CHECK-NEXT: DW_AT_decl_line (1)
@ -68,23 +82,9 @@ CHECK-NEXT: DW_AT_encoding (DW_ATE_unsigned)
CHECK: DW_TAG_variable
CHECK-NEXT: DW_AT_name ("z")
CHECK-NEXT: DW_AT_type (0x000000ac "int[2]")
CHECK-NEXT: DW_AT_type (0x000000d4 "int[2]")
CHECK-NEXT: DW_AT_external (true)
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
CHECK-NEXT: DW_AT_decl_line (8)
CHECK-NEXT: DW_AT_location (DW_OP_addr 0xffffffff)
CHECK: DW_TAG_subprogram
CHECK-NEXT: DW_AT_low_pc
CHECK-NEXT: DW_AT_high_pc
CHECK-NEXT: DW_AT_frame_base
CHECK-NEXT: DW_AT_name ("foo")
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
CHECK-NEXT: DW_AT_decl_line (3)
CHECK: DW_TAG_formal_parameter
CHECK-NEXT: DW_AT_location (DW_OP_WASM_location 0x0 0x0, DW_OP_stack_value)
CHECK-NEXT: DW_AT_name ("p")
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
CHECK-NEXT: DW_AT_decl_line (3)

View File

@ -1114,33 +1114,6 @@ void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
D->addChild(TheCU.constructImportedEntityDIE(N));
}
/// Sort and unique GVEs by comparing their fragment offset.
static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &
sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) {
llvm::sort(
GVEs, [](DwarfCompileUnit::GlobalExpr A, DwarfCompileUnit::GlobalExpr B) {
// Sort order: first null exprs, then exprs without fragment
// info, then sort by fragment offset in bits.
// FIXME: Come up with a more comprehensive comparator so
// the sorting isn't non-deterministic, and so the following
// std::unique call works correctly.
if (!A.Expr || !B.Expr)
return !!B.Expr;
auto FragmentA = A.Expr->getFragmentInfo();
auto FragmentB = B.Expr->getFragmentInfo();
if (!FragmentA || !FragmentB)
return !!FragmentB;
return FragmentA->OffsetInBits < FragmentB->OffsetInBits;
});
GVEs.erase(std::unique(GVEs.begin(), GVEs.end(),
[](DwarfCompileUnit::GlobalExpr A,
DwarfCompileUnit::GlobalExpr B) {
return A.Expr == B.Expr;
}),
GVEs.end());
return GVEs;
}
// Emit all Dwarf sections that should come prior to the content. Create
// global DIEs and emit initial debug info sections. This is invoked by
// the target AsmPrinter.
@ -1156,14 +1129,6 @@ void DwarfDebug::beginModule(Module *M) {
assert(MMI->hasDebugInfo() &&
"DebugInfoAvailabilty unexpectedly not initialized");
SingleCU = NumDebugCUs == 1;
DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>>
GVMap;
for (const GlobalVariable &Global : M->globals()) {
SmallVector<DIGlobalVariableExpression *, 1> GVs;
Global.getDebugInfo(GVs);
for (auto *GVE : GVs)
GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()});
}
// Create the symbol that designates the start of the unit's contribution
// to the string offsets table. In a split DWARF scenario, only the skeleton
@ -1189,58 +1154,6 @@ void DwarfDebug::beginModule(Module *M) {
// address table (.debug_addr) header.
AddrPool.setLabel(Asm->createTempSymbol("addr_table_base"));
DebugLocs.setSym(Asm->createTempSymbol("loclists_table_base"));
for (DICompileUnit *CUNode : M->debug_compile_units()) {
// FIXME: Move local imported entities into a list attached to the
// subprogram, then this search won't be needed and a
// getImportedEntities().empty() test should go below with the rest.
bool HasNonLocalImportedEntities = llvm::any_of(
CUNode->getImportedEntities(), [](const DIImportedEntity *IE) {
return !isa<DILocalScope>(IE->getScope());
});
if (!HasNonLocalImportedEntities && CUNode->getEnumTypes().empty() &&
CUNode->getRetainedTypes().empty() &&
CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty())
continue;
DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode);
// Global Variables.
for (auto *GVE : CUNode->getGlobalVariables()) {
// Don't bother adding DIGlobalVariableExpressions listed in the CU if we
// already know about the variable and it isn't adding a constant
// expression.
auto &GVMapEntry = GVMap[GVE->getVariable()];
auto *Expr = GVE->getExpression();
if (!GVMapEntry.size() || (Expr && Expr->isConstant()))
GVMapEntry.push_back({nullptr, Expr});
}
DenseSet<DIGlobalVariable *> Processed;
for (auto *GVE : CUNode->getGlobalVariables()) {
DIGlobalVariable *GV = GVE->getVariable();
if (Processed.insert(GV).second)
CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
}
for (auto *Ty : CUNode->getEnumTypes()) {
// The enum types array by design contains pointers to
// MDNodes rather than DIRefs. Unique them here.
CU.getOrCreateTypeDIE(cast<DIType>(Ty));
}
for (auto *Ty : CUNode->getRetainedTypes()) {
// The retained types array by design contains pointers to
// MDNodes rather than DIRefs. Unique them here.
if (DIType *RT = dyn_cast<DIType>(Ty))
// There is no point in force-emitting a forward declaration.
CU.getOrCreateTypeDIE(RT);
}
// Emit imported_modules last so that the relevant context is already
// available.
for (auto *IE : CUNode->getImportedEntities())
constructAndAddImportedEntityDIE(CU, IE);
}
}
void DwarfDebug::finishEntityDefinitions() {
@ -1405,6 +1318,33 @@ void DwarfDebug::finalizeModuleInfo() {
SkeletonHolder.computeSizeAndOffsets();
}
/// Sort and unique GVEs by comparing their fragment offset.
static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &
sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) {
llvm::sort(
GVEs, [](DwarfCompileUnit::GlobalExpr A, DwarfCompileUnit::GlobalExpr B) {
// Sort order: first null exprs, then exprs without fragment
// info, then sort by fragment offset in bits.
// FIXME: Come up with a more comprehensive comparator so
// the sorting isn't non-deterministic, and so the following
// std::unique call works correctly.
if (!A.Expr || !B.Expr)
return !!B.Expr;
auto FragmentA = A.Expr->getFragmentInfo();
auto FragmentB = B.Expr->getFragmentInfo();
if (!FragmentA || !FragmentB)
return !!FragmentB;
return FragmentA->OffsetInBits < FragmentB->OffsetInBits;
});
GVEs.erase(std::unique(GVEs.begin(), GVEs.end(),
[](DwarfCompileUnit::GlobalExpr A,
DwarfCompileUnit::GlobalExpr B) {
return A.Expr == B.Expr;
}),
GVEs.end());
return GVEs;
}
// Emit all Dwarf sections that should come after the content.
void DwarfDebug::endModule() {
// Terminate the pending line table.
@ -1414,9 +1354,68 @@ void DwarfDebug::endModule() {
assert(CurFn == nullptr);
assert(CurMI == nullptr);
for (const auto &P : CUMap) {
auto &CU = *P.second;
CU.createBaseTypeDIEs();
DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>>
GVMap;
for (const GlobalVariable &Global : MMI->getModule()->globals()) {
SmallVector<DIGlobalVariableExpression *, 1> GVs;
Global.getDebugInfo(GVs);
for (auto *GVE : GVs)
GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()});
}
for (DICompileUnit *CUNode : MMI->getModule()->debug_compile_units()) {
auto *CU = CUMap.lookup(CUNode);
// If this CU hasn't been emitted yet, create it here unless it is empty.
if (!CU) {
// FIXME: Move local imported entities into a list attached to the
// subprogram, then this search won't be needed and a
// getImportedEntities().empty() test should go below with the rest.
bool HasNonLocalImportedEntities = llvm::any_of(
CUNode->getImportedEntities(), [](const DIImportedEntity *IE) {
return !isa<DILocalScope>(IE->getScope());
});
if (!HasNonLocalImportedEntities && CUNode->getEnumTypes().empty() &&
CUNode->getRetainedTypes().empty() &&
CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty())
continue;
CU = &getOrCreateDwarfCompileUnit(CUNode);
}
// Global Variables.
for (auto *GVE : CUNode->getGlobalVariables()) {
// Don't bother adding DIGlobalVariableExpressions listed in the CU if we
// already know about the variable and it isn't adding a constant
// expression.
auto &GVMapEntry = GVMap[GVE->getVariable()];
auto *Expr = GVE->getExpression();
if (!GVMapEntry.size() || (Expr && Expr->isConstant()))
GVMapEntry.push_back({nullptr, Expr});
}
DenseSet<DIGlobalVariable *> Processed;
for (auto *GVE : CUNode->getGlobalVariables()) {
DIGlobalVariable *GV = GVE->getVariable();
if (Processed.insert(GV).second)
CU->getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
}
for (auto *Ty : CUNode->getEnumTypes())
CU->getOrCreateTypeDIE(cast<DIType>(Ty));
for (auto *Ty : CUNode->getRetainedTypes())
if (DIType *RT = dyn_cast<DIType>(Ty))
// There is no point in force-emitting a forward declaration.
CU->getOrCreateTypeDIE(RT);
// Emit imported entities last so that the relevant context
// is already available.
for (auto *IE : CUNode->getImportedEntities())
constructAndAddImportedEntityDIE(*CU, IE);
CU->createBaseTypeDIEs();
}
// If we aren't actually generating debug info (check beginModule -

View File

@ -10,12 +10,12 @@ target triple = "thumbv7-apple-darwin10"
@x4 = internal global i8 1, align 1, !dbg !8
@x5 = global i8 1, align 1, !dbg !10
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable [6]
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x1"
; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr [[ADDR:0x[0-9a-fA-F]+]])
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable [6]
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x2"
; CHECK-NOT: {{DW_TAG|NULL}}

View File

@ -1,11 +1,11 @@
; RUN: llc -arm-global-merge -global-merge-group-by-use=false -filetype=obj < %s | llvm-dwarfdump -debug-info -v - | FileCheck %s
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable [6]
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x1"
; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr [[ADDR:0x[0-9a-fA-F]+]])
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable [6]
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x2"
; CHECK-NOT: {{DW_TAG|NULL}}

View File

@ -13,22 +13,7 @@
declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK: {{.*}}DW_TAG_variable
; CHECK-NEXT: DW_AT_name {{.*}}"GlobA"
; CHECK-NEXT: DW_AT_type
; CHECK-NEXT: DW_AT_external
; CHECK-NEXT: DW_AT_decl_file
; CHECK-NEXT: DW_AT_decl_line
; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0)
@GlobA = common addrspace(1) global i32 0, align 4, !dbg !0
; CHECK: {{.*}}DW_TAG_variable
; CHECK-NEXT: DW_AT_name {{.*}}"GlobB"
; CHECK-NEXT: DW_AT_type
; CHECK-NEXT: DW_AT_external
; CHECK-NEXT: DW_AT_decl_file
; CHECK-NEXT: DW_AT_decl_line
; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0)
@GlobB = common addrspace(1) global i32 0, align 4, !dbg !6
; CHECK: {{.*}}DW_TAG_subprogram
@ -78,12 +63,28 @@ entry:
!llvm.ident = !{!12}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
; CHECK: {{.*}}DW_TAG_variable
; CHECK-NEXT: DW_AT_name {{.*}}"GlobA"
; CHECK-NEXT: DW_AT_type
; CHECK-NEXT: DW_AT_external
; CHECK-NEXT: DW_AT_decl_file
; CHECK-NEXT: DW_AT_decl_line
; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0)
!1 = distinct !DIGlobalVariable(name: "GlobA", scope: !2, file: !3, line: 1, type: !8, isLocal: false, isDefinition: true)
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 5.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)
!3 = !DIFile(filename: "variable-locations.cl", directory: "/some/random/directory")
!4 = !{}
!5 = !{!0, !6}
!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
; CHECK: {{.*}}DW_TAG_variable
; CHECK-NEXT: DW_AT_name {{.*}}"GlobB"
; CHECK-NEXT: DW_AT_type
; CHECK-NEXT: DW_AT_external
; CHECK-NEXT: DW_AT_decl_file
; CHECK-NEXT: DW_AT_decl_line
; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0)
!7 = distinct !DIGlobalVariable(name: "GlobB", scope: !2, file: !3, line: 2, type: !8, isLocal: false, isDefinition: true)
!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!9 = !{i32 2, i32 0}

View File

@ -36,9 +36,8 @@ entry:
; CHECK: .quad bla1
; CHECK-NEXT: DW_TAG_variable
;
; CHECK: .quad bla2
; CHECK: .quad bla2
; CHECK-NEXT: DW_TAG_const_type
; CHECK-NEXT: DW_TAG_subprogram
; Function Attrs: nounwind readnone speculatable willreturn
declare void @llvm.dbg.value(metadata, metadata, metadata) #1

View File

@ -27,13 +27,15 @@
; The DISubprogram should show up in compile unit a.
; CHECK: DW_TAG_compile_unit
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("b.cpp")
; CHECK-NOT: DW_TAG_subprogram
; CHECK: DW_AT_name ("a.cpp")
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("func")
; CHECK: DW_TAG_compile_unit
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("a.cpp")
; CHECK: DW_AT_name ("func")
; CHECK: DW_AT_name ("b.cpp")
; CHECK-NOT: DW_TAG_subprogram
source_filename = "test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll"

View File

@ -18,6 +18,10 @@
; CHECK-NEXT: DW_AT_reference DW_FORM_flag_present
; CHECK: DW_TAG_subroutine_type DW_CHILDREN_yes
; CHECK-NEXT: DW_AT_rvalue_reference DW_FORM_flag_present
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG_subprogram
; CHECK: DW_AT_name {{.*}} "g")
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG_subprogram

View File

@ -11,9 +11,9 @@
; We should have all three linkage names in the .debug_info and .debug_names
; ALL: .debug_info contents:
; ALL: DW_AT_linkage_name ("_ZN1n1vE")
; ALL: DW_AT_linkage_name ("_Z1fi")
; ALL: DW_AT_linkage_name ("_Z1gi")
; ALL: DW_AT_linkage_name ("_ZN1n1vE")
; ALL: .debug_names contents:
; ALL: String: {{.*}} "_Z1fi"
; ALL: String: {{.*}} "_Z1gi"

View File

@ -6,12 +6,12 @@
; rdar://17628609
; CHECK: DW_TAG_compile_unit
; CHECK: 0x[[ENUM:.*]]: DW_TAG_enumeration_type
; CHECK-NEXT: DW_AT_name {{.*}}"EA"
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_MIPS_linkage_name {{.*}}"_Z4topA2EA"
; CHECK: DW_TAG_formal_parameter
; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x{{.*}} => {0x[[ENUM]]}
; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x{{.*}} => {0x[[ENUM:.*]]}
; CHECK: 0x[[ENUM]]: DW_TAG_enumeration_type
; CHECK-NEXT: DW_AT_name {{.*}}"EA"
; CHECK: DW_TAG_compile_unit
; CHECK: DW_TAG_subprogram

View File

@ -34,6 +34,9 @@
; b.m_fn2();
; }
; CHECK: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_name ("B")
; CHECK: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_name ("C")
; CHECK: [[M_FN3_DECL:.*]]: DW_TAG_subprogram

View File

@ -13,17 +13,6 @@
; CHECK-NOT: DW_AT_decl_file
; CHECK-NOT: DW_AT_decl_line
; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
; CHECK: DW_AT_name ("i")
; CHECK: [[VAR_FWD:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
; CHECK: DW_AT_name ("var_fwd")
; CHECK: [[FOO:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
; CHECK: DW_AT_name ("foo")
; CHECK: DW_AT_declaration
; CHECK: [[BAR:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
; CHECK: DW_AT_name ("bar")
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_MIPS_linkage_name
; CHECK: DW_AT_name ("f1")
@ -33,6 +22,15 @@
; CHECK: DW_TAG_formal_parameter
; CHECK: NULL
; CHECK: [[FOO:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
; CHECK: DW_AT_name ("foo")
; CHECK: DW_AT_declaration
; CHECK: [[BAR:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
; CHECK: DW_AT_name ("bar")
; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
; CHECK: DW_AT_name ("i")
; CHECK: [[BAZ:0x[0-9a-f]*]]:{{.*}}DW_TAG_typedef
; CHECK: DW_AT_name ("baz")
@ -44,6 +42,9 @@
; CHECK: DW_AT_name ("func_decl")
; CHECK: DW_AT_declaration
; CHECK: [[VAR_FWD:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
; CHECK: DW_AT_name ("var_fwd")
; CHECK: [[FUNC_FWD:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
; CHECK: DW_AT_name ("func_fwd")
; CHECK-NOT: DW_AT_declaration
@ -56,13 +57,6 @@
; CHECK: DW_TAG_imported_declaration
; CHECK: NULL
; CHECK: DW_TAG_base_type
; CHECK: DW_TAG_imported_module
; CHECK: DW_AT_decl_file ([[F2:.*]])
; CHECK: DW_AT_decl_line (18)
; CHECK: DW_AT_import ([[NS1]])
; CHECK: DW_TAG_imported_declaration
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_MIPS_linkage_name
@ -126,7 +120,13 @@
; CHECK: NULL
; CHECK: NULL
; CHECK: DW_TAG_base_type
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_imported_module
; CHECK: DW_AT_decl_file ([[F2:.*]])
; CHECK: DW_AT_decl_line (18)
; CHECK: DW_AT_import ([[NS1]])
; CHECK: DW_TAG_imported_declaration
; CHECK: DW_TAG_base_type
; CHECK: NULL

View File

@ -12,16 +12,6 @@
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("a")
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("b")
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
@ -32,6 +22,16 @@
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("a")
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
; Variadic C++ member function.
; struct A { void a(int c, ...); }
;

View File

@ -5,7 +5,7 @@
# encountering an IMPLICIT_DEF in its own lexical scope.
# CHECK: .debug_info contents:
# CHECK: DW_TAG_formal_parameter [14]
# CHECK: DW_TAG_formal_parameter [13]
# CHECK-NEXT: DW_AT_const_value [DW_FORM_udata] (0)
# CHECK-NEXT: DW_AT_abstract_origin {{.*}} "name"
--- |

View File

@ -105,36 +105,6 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 2 // Abbreviation Code
; CHECK-NEXT:.b8 52 // DW_TAG_variable
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
; CHECK-NEXT:.b8 3 // DW_AT_name
; CHECK-NEXT:.b8 8 // DW_FORM_string
; CHECK-NEXT:.b8 73 // DW_AT_type
; CHECK-NEXT:.b8 19 // DW_FORM_ref4
; CHECK-NEXT:.b8 63 // DW_AT_external
; CHECK-NEXT:.b8 12 // DW_FORM_flag
; CHECK-NEXT:.b8 58 // DW_AT_decl_file
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 59 // DW_AT_decl_line
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 51 // DW_AT_address_class
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 2 // DW_AT_location
; CHECK-NEXT:.b8 10 // DW_FORM_block1
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 3 // Abbreviation Code
; CHECK-NEXT:.b8 36 // DW_TAG_base_type
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
; CHECK-NEXT:.b8 3 // DW_AT_name
; CHECK-NEXT:.b8 8 // DW_FORM_string
; CHECK-NEXT:.b8 62 // DW_AT_encoding
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 11 // DW_AT_byte_size
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 4 // Abbreviation Code
; CHECK-NEXT:.b8 46 // DW_TAG_subprogram
; CHECK-NEXT:.b8 1 // DW_CHILDREN_yes
; CHECK-NEXT:.b8 17 // DW_AT_low_pc
@ -156,7 +126,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK-NEXT:.b8 12 // DW_FORM_flag
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 5 // Abbreviation Code
; CHECK-NEXT:.b8 3 // Abbreviation Code
; CHECK-NEXT:.b8 5 // DW_TAG_formal_parameter
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
; CHECK-NEXT:.b8 3 // DW_AT_name
@ -169,6 +139,36 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK-NEXT:.b8 19 // DW_FORM_ref4
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 4 // Abbreviation Code
; CHECK-NEXT:.b8 52 // DW_TAG_variable
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
; CHECK-NEXT:.b8 3 // DW_AT_name
; CHECK-NEXT:.b8 8 // DW_FORM_string
; CHECK-NEXT:.b8 73 // DW_AT_type
; CHECK-NEXT:.b8 19 // DW_FORM_ref4
; CHECK-NEXT:.b8 63 // DW_AT_external
; CHECK-NEXT:.b8 12 // DW_FORM_flag
; CHECK-NEXT:.b8 58 // DW_AT_decl_file
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 59 // DW_AT_decl_line
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 51 // DW_AT_address_class
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 2 // DW_AT_location
; CHECK-NEXT:.b8 10 // DW_FORM_block1
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 5 // Abbreviation Code
; CHECK-NEXT:.b8 36 // DW_TAG_base_type
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
; CHECK-NEXT:.b8 3 // DW_AT_name
; CHECK-NEXT:.b8 8 // DW_FORM_string
; CHECK-NEXT:.b8 62 // DW_AT_encoding
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 11 // DW_AT_byte_size
; CHECK-NEXT:.b8 11 // DW_FORM_data1
; CHECK-NEXT:.b8 0 // EOM(1)
; CHECK-NEXT:.b8 0 // EOM(2)
; CHECK-NEXT:.b8 6 // Abbreviation Code
; CHECK-NEXT:.b8 15 // DW_TAG_pointer_type
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
@ -258,46 +258,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK-NEXT:.b64 Lfunc_end0 // DW_AT_high_pc
; CHECK-NEXT:.b8 2 // Abbrev [2] 0x65:0x1a DW_TAG_variable
; CHECK-NEXT:.b8 71 // DW_AT_name
; CHECK-NEXT:.b8 76
; CHECK-NEXT:.b8 79
; CHECK-NEXT:.b8 66
; CHECK-NEXT:.b8 65
; CHECK-NEXT:.b8 76
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b32 127 // DW_AT_type
; CHECK-NEXT:.b8 1 // DW_AT_external
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 3 // DW_AT_decl_line
; CHECK-NEXT:.b8 5 // DW_AT_address_class
; CHECK-NEXT:.b8 9 // DW_AT_location
; CHECK-NEXT:.b8 3
; CHECK-NEXT:.b64 GLOBAL
; CHECK-NEXT:.b8 3 // Abbrev [3] 0x7f:0x7 DW_TAG_base_type
; CHECK-NEXT:.b8 105 // DW_AT_name
; CHECK-NEXT:.b8 110
; CHECK-NEXT:.b8 116
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b8 5 // DW_AT_encoding
; CHECK-NEXT:.b8 4 // DW_AT_byte_size
; CHECK-NEXT:.b8 2 // Abbrev [2] 0x86:0x1a DW_TAG_variable
; CHECK-NEXT:.b8 83 // DW_AT_name
; CHECK-NEXT:.b8 72
; CHECK-NEXT:.b8 65
; CHECK-NEXT:.b8 82
; CHECK-NEXT:.b8 69
; CHECK-NEXT:.b8 68
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b32 127 // DW_AT_type
; CHECK-NEXT:.b8 1 // DW_AT_external
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 4 // DW_AT_decl_line
; CHECK-NEXT:.b8 8 // DW_AT_address_class
; CHECK-NEXT:.b8 9 // DW_AT_location
; CHECK-NEXT:.b8 3
; CHECK-NEXT:.b64 SHARED
; CHECK-NEXT:.b8 4 // Abbrev [4] 0xa0:0x45 DW_TAG_subprogram
; CHECK-NEXT:.b8 2 // Abbrev [2] 0x65:0x45 DW_TAG_subprogram
; CHECK-NEXT:.b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK-NEXT:.b64 Lfunc_end0 // DW_AT_high_pc
; CHECK-NEXT:.b8 1 // DW_AT_frame_base
@ -315,32 +276,71 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
; CHECK-NEXT:.b8 1 // DW_AT_external
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc0:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 3 // Abbrev [3] 0x85:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 97 // DW_AT_name
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
; CHECK-NEXT:.b32 229 // DW_AT_type
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc9:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 3 // Abbrev [3] 0x8e:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 120 // DW_AT_name
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
; CHECK-NEXT:.b32 238 // DW_AT_type
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xd2:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 3 // Abbrev [3] 0x97:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 121 // DW_AT_name
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
; CHECK-NEXT:.b32 238 // DW_AT_type
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xdb:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 3 // Abbrev [3] 0xa0:0x9 DW_TAG_formal_parameter
; CHECK-NEXT:.b8 105 // DW_AT_name
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
; CHECK-NEXT:.b32 127 // DW_AT_type
; CHECK-NEXT:.b32 196 // DW_AT_type
; CHECK-NEXT:.b8 0 // End Of Children Mark
; CHECK-NEXT:.b8 3 // Abbrev [3] 0xe5:0x9 DW_TAG_base_type
; CHECK-NEXT:.b8 4 // Abbrev [4] 0xaa:0x1a DW_TAG_variable
; CHECK-NEXT:.b8 71 // DW_AT_name
; CHECK-NEXT:.b8 76
; CHECK-NEXT:.b8 79
; CHECK-NEXT:.b8 66
; CHECK-NEXT:.b8 65
; CHECK-NEXT:.b8 76
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b32 196 // DW_AT_type
; CHECK-NEXT:.b8 1 // DW_AT_external
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 3 // DW_AT_decl_line
; CHECK-NEXT:.b8 5 // DW_AT_address_class
; CHECK-NEXT:.b8 9 // DW_AT_location
; CHECK-NEXT:.b8 3
; CHECK-NEXT:.b64 GLOBAL
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc4:0x7 DW_TAG_base_type
; CHECK-NEXT:.b8 105 // DW_AT_name
; CHECK-NEXT:.b8 110
; CHECK-NEXT:.b8 116
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b8 5 // DW_AT_encoding
; CHECK-NEXT:.b8 4 // DW_AT_byte_size
; CHECK-NEXT:.b8 4 // Abbrev [4] 0xcb:0x1a DW_TAG_variable
; CHECK-NEXT:.b8 83 // DW_AT_name
; CHECK-NEXT:.b8 72
; CHECK-NEXT:.b8 65
; CHECK-NEXT:.b8 82
; CHECK-NEXT:.b8 69
; CHECK-NEXT:.b8 68
; CHECK-NEXT:.b8 0
; CHECK-NEXT:.b32 196 // DW_AT_type
; CHECK-NEXT:.b8 1 // DW_AT_external
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
; CHECK-NEXT:.b8 4 // DW_AT_decl_line
; CHECK-NEXT:.b8 8 // DW_AT_address_class
; CHECK-NEXT:.b8 9 // DW_AT_location
; CHECK-NEXT:.b8 3
; CHECK-NEXT:.b64 SHARED
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xe5:0x9 DW_TAG_base_type
; CHECK-NEXT:.b8 102 // DW_AT_name
; CHECK-NEXT:.b8 108
; CHECK-NEXT:.b8 111

File diff suppressed because it is too large Load Diff

View File

@ -153,15 +153,6 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 2 // Abbreviation Code
; CHECK-NEXT: .b8 19 // DW_TAG_structure_type
; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
; CHECK-NEXT: .b8 3 // DW_AT_name
; CHECK-NEXT: .b8 8 // DW_FORM_string
; CHECK-NEXT: .b8 60 // DW_AT_declaration
; CHECK-NEXT: .b8 12 // DW_FORM_flag
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 3 // Abbreviation Code
; CHECK-NEXT: .b8 46 // DW_TAG_subprogram
; CHECK-NEXT: .b8 1 // DW_CHILDREN_yes
; CHECK-NEXT: .b8 17 // DW_AT_low_pc
@ -179,11 +170,13 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 59 // DW_AT_decl_line
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 73 // DW_AT_type
; CHECK-NEXT: .b8 19 // DW_FORM_ref4
; CHECK-NEXT: .b8 63 // DW_AT_external
; CHECK-NEXT: .b8 12 // DW_FORM_flag
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 4 // Abbreviation Code
; CHECK-NEXT: .b8 3 // Abbreviation Code
; CHECK-NEXT: .b8 5 // DW_TAG_formal_parameter
; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
; CHECK-NEXT: .b8 3 // DW_AT_name
@ -196,20 +189,18 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 19 // DW_FORM_ref4
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 5 // Abbreviation Code
; CHECK-NEXT: .b8 52 // DW_TAG_variable
; CHECK-NEXT: .b8 4 // Abbreviation Code
; CHECK-NEXT: .b8 36 // DW_TAG_base_type
; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
; CHECK-NEXT: .b8 3 // DW_AT_name
; CHECK-NEXT: .b8 8 // DW_FORM_string
; CHECK-NEXT: .b8 58 // DW_AT_decl_file
; CHECK-NEXT: .b8 62 // DW_AT_encoding
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 59 // DW_AT_decl_line
; CHECK-NEXT: .b8 11 // DW_AT_byte_size
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 73 // DW_AT_type
; CHECK-NEXT: .b8 16 // DW_FORM_ref_addr
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 6 // Abbreviation Code
; CHECK-NEXT: .b8 5 // Abbreviation Code
; CHECK-NEXT: .b8 46 // DW_TAG_subprogram
; CHECK-NEXT: .b8 1 // DW_CHILDREN_yes
; CHECK-NEXT: .b8 17 // DW_AT_low_pc
@ -227,143 +218,36 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 59 // DW_AT_decl_line
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 73 // DW_AT_type
; CHECK-NEXT: .b8 19 // DW_FORM_ref4
; CHECK-NEXT: .b8 63 // DW_AT_external
; CHECK-NEXT: .b8 12 // DW_FORM_flag
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 7 // Abbreviation Code
; CHECK-NEXT: .b8 36 // DW_TAG_base_type
; CHECK-NEXT: .b8 6 // Abbreviation Code
; CHECK-NEXT: .b8 52 // DW_TAG_variable
; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
; CHECK-NEXT: .b8 3 // DW_AT_name
; CHECK-NEXT: .b8 8 // DW_FORM_string
; CHECK-NEXT: .b8 62 // DW_AT_encoding
; CHECK-NEXT: .b8 58 // DW_AT_decl_file
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 11 // DW_AT_byte_size
; CHECK-NEXT: .b8 59 // DW_AT_decl_line
; CHECK-NEXT: .b8 11 // DW_FORM_data1
; CHECK-NEXT: .b8 73 // DW_AT_type
; CHECK-NEXT: .b8 16 // DW_FORM_ref_addr
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 7 // Abbreviation Code
; CHECK-NEXT: .b8 19 // DW_TAG_structure_type
; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
; CHECK-NEXT: .b8 3 // DW_AT_name
; CHECK-NEXT: .b8 8 // DW_FORM_string
; CHECK-NEXT: .b8 60 // DW_AT_declaration
; CHECK-NEXT: .b8 12 // DW_FORM_flag
; CHECK-NEXT: .b8 0 // EOM(1)
; CHECK-NEXT: .b8 0 // EOM(2)
; CHECK-NEXT: .b8 0 // EOM(3)
; CHECK-NEXT: }
; CHECK-NEXT: .section .debug_info
; CHECK-NEXT: {
; CHECK-NEXT: .b32 159 // Length of Unit
; CHECK-NEXT: .b8 2 // DWARF version number
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b32 .debug_abbrev // Offset Into Abbrev. Section
; CHECK-NEXT: .b8 8 // Address Size (in bytes)
; CHECK-NEXT: .b8 1 // Abbrev [1] 0xb:0x98 DW_TAG_compile_unit
; CHECK-NEXT: .b8 99 // DW_AT_producer
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 110
; CHECK-NEXT: .b8 103
; CHECK-NEXT: .b8 32
; CHECK-NEXT: .b8 118
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 114
; CHECK-NEXT: .b8 115
; CHECK-NEXT: .b8 105
; CHECK-NEXT: .b8 111
; CHECK-NEXT: .b8 110
; CHECK-NEXT: .b8 32
; CHECK-NEXT: .b8 51
; CHECK-NEXT: .b8 46
; CHECK-NEXT: .b8 53
; CHECK-NEXT: .b8 46
; CHECK-NEXT: .b8 48
; CHECK-NEXT: .b8 32
; CHECK-NEXT: .b8 40
; CHECK-NEXT: .b8 50
; CHECK-NEXT: .b8 49
; CHECK-NEXT: .b8 48
; CHECK-NEXT: .b8 52
; CHECK-NEXT: .b8 55
; CHECK-NEXT: .b8 57
; CHECK-NEXT: .b8 41
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 4 // DW_AT_language
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 100 // DW_AT_name
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 98
; CHECK-NEXT: .b8 117
; CHECK-NEXT: .b8 103
; CHECK-NEXT: .b8 45
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 111
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 45
; CHECK-NEXT: .b8 111
; CHECK-NEXT: .b8 102
; CHECK-NEXT: .b8 102
; CHECK-NEXT: .b8 115
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 116
; CHECK-NEXT: .b8 50
; CHECK-NEXT: .b8 46
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b32 .debug_line // DW_AT_stmt_list
; CHECK-NEXT: .b8 47 // DW_AT_comp_dir
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 118
; CHECK-NEXT: .b8 109
; CHECK-NEXT: .b8 95
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 109
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 107
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 95
; CHECK-NEXT: .b8 103
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b64 Lfunc_begin1 // DW_AT_low_pc
; CHECK-NEXT: .b64 Lfunc_end1 // DW_AT_high_pc
; CHECK-NEXT: .b8 2 // Abbrev [2] 0x64:0x4 DW_TAG_structure_type
; CHECK-NEXT: .b8 65 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 1 // DW_AT_declaration
; CHECK-NEXT: .b8 3 // Abbrev [3] 0x68:0x3a DW_TAG_subprogram
; CHECK-NEXT: .b64 Lfunc_begin1 // DW_AT_low_pc
; CHECK-NEXT: .b64 Lfunc_end1 // DW_AT_high_pc
; CHECK-NEXT: .b8 1 // DW_AT_frame_base
; CHECK-NEXT: .b8 156
; CHECK-NEXT: .b8 95 // DW_AT_MIPS_linkage_name
; CHECK-NEXT: .b8 90
; CHECK-NEXT: .b8 51
; CHECK-NEXT: .b8 98
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 122
; CHECK-NEXT: .b8 49
; CHECK-NEXT: .b8 65
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 98 // DW_AT_name
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 122
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 2 // DW_AT_decl_file
; CHECK-NEXT: .b8 6 // DW_AT_decl_line
; CHECK-NEXT: .b8 1 // DW_AT_external
; CHECK-NEXT: .b8 4 // Abbrev [4] 0x8b:0x9 DW_TAG_formal_parameter
; CHECK-NEXT: .b8 97 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 2 // DW_AT_decl_file
; CHECK-NEXT: .b8 6 // DW_AT_decl_line
; CHECK-NEXT: .b32 100 // DW_AT_type
; CHECK-NEXT: .b8 5 // Abbrev [5] 0x94:0xd DW_TAG_variable
; CHECK-NEXT: .b8 122 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 2 // DW_AT_decl_file
; CHECK-NEXT: .b8 7 // DW_AT_decl_line
; CHECK-NEXT: .b64 .debug_info+311 // DW_AT_type
; CHECK-NEXT: .b8 0 // End Of Children Mark
; CHECK-NEXT: .b8 0 // End Of Children Mark
; CHECK-NEXT: .b32 152 // Length of Unit
; CHECK-NEXT: .b8 2 // DWARF version number
; CHECK-NEXT: .b8 0
@ -441,7 +325,7 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK-NEXT: .b64 Lfunc_end0 // DW_AT_high_pc
; CHECK-NEXT: .b8 6 // Abbrev [6] 0x64:0x30 DW_TAG_subprogram
; CHECK-NEXT: .b8 2 // Abbrev [2] 0x64:0x30 DW_TAG_subprogram
; CHECK-NEXT: .b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK-NEXT: .b64 Lfunc_end0 // DW_AT_high_pc
; CHECK-NEXT: .b8 1 // DW_AT_frame_base
@ -462,14 +346,14 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 1 // DW_AT_decl_line
; CHECK-NEXT: .b32 148 // DW_AT_type
; CHECK-NEXT: .b8 1 // DW_AT_external
; CHECK-NEXT: .b8 4 // Abbrev [4] 0x8a:0x9 DW_TAG_formal_parameter
; CHECK-NEXT: .b8 3 // Abbrev [3] 0x8a:0x9 DW_TAG_formal_parameter
; CHECK-NEXT: .b8 98 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 1 // DW_AT_decl_file
; CHECK-NEXT: .b8 1 // DW_AT_decl_line
; CHECK-NEXT: .b32 148 // DW_AT_type
; CHECK-NEXT: .b8 0 // End Of Children Mark
; CHECK-NEXT: .b8 7 // Abbrev [7] 0x94:0x7 DW_TAG_base_type
; CHECK-NEXT: .b8 4 // Abbrev [4] 0x94:0x7 DW_TAG_base_type
; CHECK-NEXT: .b8 105 // DW_AT_name
; CHECK-NEXT: .b8 110
; CHECK-NEXT: .b8 116
@ -477,6 +361,122 @@ attributes #2 = { "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp
; CHECK-NEXT: .b8 5 // DW_AT_encoding
; CHECK-NEXT: .b8 4 // DW_AT_byte_size
; CHECK-NEXT: .b8 0 // End Of Children Mark
; CHECK-NEXT: .b32 159 // Length of Unit
; CHECK-NEXT: .b8 2 // DWARF version number
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b32 .debug_abbrev // Offset Into Abbrev. Section
; CHECK-NEXT: .b8 8 // Address Size (in bytes)
; CHECK-NEXT: .b8 1 // Abbrev [1] 0xb:0x98 DW_TAG_compile_unit
; CHECK-NEXT: .b8 99 // DW_AT_producer
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 110
; CHECK-NEXT: .b8 103
; CHECK-NEXT: .b8 32
; CHECK-NEXT: .b8 118
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 114
; CHECK-NEXT: .b8 115
; CHECK-NEXT: .b8 105
; CHECK-NEXT: .b8 111
; CHECK-NEXT: .b8 110
; CHECK-NEXT: .b8 32
; CHECK-NEXT: .b8 51
; CHECK-NEXT: .b8 46
; CHECK-NEXT: .b8 53
; CHECK-NEXT: .b8 46
; CHECK-NEXT: .b8 48
; CHECK-NEXT: .b8 32
; CHECK-NEXT: .b8 40
; CHECK-NEXT: .b8 50
; CHECK-NEXT: .b8 49
; CHECK-NEXT: .b8 48
; CHECK-NEXT: .b8 52
; CHECK-NEXT: .b8 55
; CHECK-NEXT: .b8 57
; CHECK-NEXT: .b8 41
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 4 // DW_AT_language
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 100 // DW_AT_name
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 98
; CHECK-NEXT: .b8 117
; CHECK-NEXT: .b8 103
; CHECK-NEXT: .b8 45
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 111
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 45
; CHECK-NEXT: .b8 111
; CHECK-NEXT: .b8 102
; CHECK-NEXT: .b8 102
; CHECK-NEXT: .b8 115
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 116
; CHECK-NEXT: .b8 50
; CHECK-NEXT: .b8 46
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b32 .debug_line // DW_AT_stmt_list
; CHECK-NEXT: .b8 47 // DW_AT_comp_dir
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 108
; CHECK-NEXT: .b8 118
; CHECK-NEXT: .b8 109
; CHECK-NEXT: .b8 95
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 109
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 107
; CHECK-NEXT: .b8 101
; CHECK-NEXT: .b8 95
; CHECK-NEXT: .b8 103
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 99
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b64 Lfunc_begin1 // DW_AT_low_pc
; CHECK-NEXT: .b64 Lfunc_end1 // DW_AT_high_pc
; CHECK-NEXT: .b8 5 // Abbrev [5] 0x64:0x3a DW_TAG_subprogram
; CHECK-NEXT: .b64 Lfunc_begin1 // DW_AT_low_pc
; CHECK-NEXT: .b64 Lfunc_end1 // DW_AT_high_pc
; CHECK-NEXT: .b8 1 // DW_AT_frame_base
; CHECK-NEXT: .b8 156
; CHECK-NEXT: .b8 95 // DW_AT_MIPS_linkage_name
; CHECK-NEXT: .b8 90
; CHECK-NEXT: .b8 51
; CHECK-NEXT: .b8 98
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 122
; CHECK-NEXT: .b8 49
; CHECK-NEXT: .b8 65
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 98 // DW_AT_name
; CHECK-NEXT: .b8 97
; CHECK-NEXT: .b8 122
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 2 // DW_AT_decl_file
; CHECK-NEXT: .b8 6 // DW_AT_decl_line
; CHECK-NEXT: .b8 1 // DW_AT_external
; CHECK-NEXT: .b8 3 // Abbrev [3] 0x87:0x9 DW_TAG_formal_parameter
; CHECK-NEXT: .b8 97 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 2 // DW_AT_decl_file
; CHECK-NEXT: .b8 6 // DW_AT_decl_line
; CHECK-NEXT: .b32 158 // DW_AT_type
; CHECK-NEXT: .b8 6 // Abbrev [6] 0x90:0xd DW_TAG_variable
; CHECK-NEXT: .b8 122 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 2 // DW_AT_decl_file
; CHECK-NEXT: .b8 7 // DW_AT_decl_line
; CHECK-NEXT: .b64 .debug_info+148 // DW_AT_type
; CHECK-NEXT: .b8 0 // End Of Children Mark
; CHECK-NEXT: .b8 7 // Abbrev [7] 0x9e:0x4 DW_TAG_structure_type
; CHECK-NEXT: .b8 65 // DW_AT_name
; CHECK-NEXT: .b8 0
; CHECK-NEXT: .b8 1 // DW_AT_declaration
; CHECK-NEXT: .b8 0 // End Of Children Mark
; CHECK-NEXT: }
; CHECK-NEXT: .section .debug_loc { }
; CHECK-NOT: debug_

View File

@ -15,17 +15,17 @@
; 3: DwarfUnit::addUInt()
; 4: addUInt(Block, (dwarf::Attribute)0, Form, Integer);
; CHECK: DW_AT_noreturn
; CHECK: DW_AT_name ("var")
; CHECK-NOT: DW_TAG_
; CHECK: DW_AT_alignment
; CHECK: DW_AT_location (DW_OP_addr 0x0)
; CHECK: DW_AT_noreturn
;
; STRICT-NOT: DW_AT_noreturn
; STRICT: DW_AT_name ("var")
; STRICT-NOT: DW_AT_alignment
; STRICT-NOT: DW_TAG_
; STRICT: DW_AT_location (DW_OP_addr 0x0)
; STRICT-NOT: DW_AT_noreturn
@_ZL3var = internal global i32 0, align 16, !dbg !0

View File

@ -44,14 +44,6 @@ attributes #1 = { nounwind readnone }
!15 = !DILocation(line: 4, column: 23, scope: !12)
!16 = !DILocation(line: 5, column: 5, scope: !12)
; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB")
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c")
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_decl_line [DW_FORM_data1] (1)
; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC")
@ -60,3 +52,11 @@ attributes #1 = { nounwind readnone }
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_decl_line [DW_FORM_data1] (4)
; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB")
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c")
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_decl_line [DW_FORM_data1] (1)

View File

@ -21,10 +21,6 @@
; CHECK: .debug_info contents:
; CHECK: DW_TAG_subroutine_type [[subroutine_abbrev]] *
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] {{.*}}
; CHECK-NEXT: DW_AT_calling_convention [DW_FORM_data1] (DW_CC_BORLAND_msfastcall)
; CHECK: DW_TAG_subprogram [{{.*}}] *
; CHECK: DW_AT_low_pc
; CHECK: DW_AT_high_pc
@ -37,6 +33,10 @@
; CHECK: DW_AT_type
; CHECK: DW_AT_external
; CHECK: DW_TAG_subroutine_type [[subroutine_abbrev]] *
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] {{.*}}
; CHECK-NEXT: DW_AT_calling_convention [DW_FORM_data1] (DW_CC_BORLAND_msfastcall)
; ModuleID = 't.cpp'
source_filename = "t.cpp"
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"

View File

@ -33,6 +33,21 @@
; auto Lambda = [i](){};
; }
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name{{.*}}"i"
; CHECK: DW_AT_alignment{{.*}}32
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_class_type
; CHECK: DW_TAG_member
; CHECK: DW_AT_name{{.*}}"i"
; CHECK: DW_AT_alignment{{.*}}32
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_formal_parameter
; CHECK: DW_TAG_class_type
; CHECK: DW_AT_name{{.*}}"C0"
; CHECK: DW_AT_alignment{{.*}}64
@ -53,21 +68,6 @@
; CHECK: DW_TAG_enumerator
; CHECK: DW_TAG_enumerator
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name{{.*}}"i"
; CHECK: DW_AT_alignment{{.*}}32
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_class_type
; CHECK: DW_TAG_member
; CHECK: DW_AT_name{{.*}}"i"
; CHECK: DW_AT_alignment{{.*}}32
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_formal_parameter
; CHECK: DW_TAG_class_type
; CHECK: DW_AT_name{{.*}}"C1"
; CHECK: DW_TAG_member

View File

@ -16,7 +16,14 @@
; }
; CHECK: DW_TAG_compile_unit
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name{{.*}}"i"
; CHECK: DW_AT_alignment{{.*}}32
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_typedef
; CHECK: DW_AT_name{{.*}}"S0"
@ -25,12 +32,6 @@
; CHECK: DW_TAG_member
; CHECK: DW_TAG_base_type
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name{{.*}}"i"
; CHECK: DW_AT_alignment{{.*}}32
; CHECK: DW_TAG_typedef
; CHECK: DW_AT_name{{.*}}"S1"
; CHECK: DW_TAG_structure_type

View File

@ -5,7 +5,7 @@
; CHECK: .L_ZTId.DW.stub:
; CHECK: .data
; CHECK-NEXT: .Lsec_end0:
; CHECK-NEXT: .Lsec_end1:
source_filename = "test/DebugInfo/X86/arange-and-stub.ll"
target triple = "x86_64-linux-gnu"

View File

@ -2,6 +2,7 @@
; RUN: llvm-dwarfdump -v -debug-info %t | FileCheck %s
; Check that any type can have a vtable holder.
; CHECK: DW_TAG_structure_type
; CHECK: [[SP:.*]]: DW_TAG_structure_type
; CHECK-NOT: TAG
; CHECK: DW_AT_containing_type [DW_FORM_ref4]

View File

@ -33,6 +33,10 @@
; A a;
; B b;
; U u;
;
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name {{.*}}"free")
; CHECK-NOT: DW_AT_accessibility
; CHECK: DW_TAG_member
; CHECK: DW_AT_name {{.*}}"pub_default_static")
@ -76,12 +80,6 @@
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name {{.*}}"union_pub_default")
; CHECK-NOT: DW_AT_accessibility
; CHECK: DW_TAG
;
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name {{.*}}"free")
; CHECK-NOT: DW_AT_accessibility
; CHECK-NOT: DW_TAG
;
; ModuleID = '/llvm/tools/clang/test/CodeGenCXX/debug-info-access.cpp'
source_filename = "test/DebugInfo/X86/debug-info-access.ll"

View File

@ -5,10 +5,6 @@
; rdar://problem/9279956
; test that the DW_AT_location of self is at ( fbreg +{{[0-9]+}}, deref, +{{[0-9]+}} )
; CHECK: [[A:.*]]: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_APPLE_objc_complete_type
; CHECK-NEXT: DW_AT_name{{.*}}"A"
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_subprogram
@ -35,6 +31,10 @@
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_artificial
; CHECK: [[A:.*]]: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_APPLE_objc_complete_type
; CHECK-NEXT: DW_AT_name{{.*}}"A"
; CHECK: [[APTR]]: DW_TAG_pointer_type
; CHECK-NEXT: {[[A]]}

View File

@ -106,6 +106,8 @@ attributes #1 = { nounwind readnone }
; (for variables) or DW_AT_const_value (for constants).
;
; PRESENT: .debug_info contents:
; PRESENT: DW_TAG_subprogram
; PRESENT: DW_TAG_variable
; PRESENT: DW_TAG_variable
; PRESENT-NEXT: DW_AT_specification {{.*}} "a"
; PRESENT-NEXT: DW_AT_location
@ -156,6 +158,8 @@ attributes #1 = { nounwind readnone }
; For Darwin gdb:
; DARWINP: .debug_info contents:
; DARWINP: DW_TAG_subprogram
; DARWINP: DW_TAG_variable
; DARWINP: DW_TAG_variable
; DARWINP-NEXT: DW_AT_specification {{.*}} "a"
; DARWINP-NEXT: DW_AT_location

View File

@ -31,6 +31,22 @@
#
# Checking that we have two compile units with two sets of high/lo_pc.
# CHECK: .debug_info contents
#
# CHECK: DW_TAG_compile_unit
# CHECK: DW_AT_low_pc {{.*}} (0x00000000 ".text")
# CHECK: DW_AT_high_pc
#
# CHECK: DW_TAG_subprogram
# CHECK-NOT: DW_TAG
# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3bari"
# CHECK-NOT: {{DW_TAG|NULL}}
# CHECK: DW_TAG_formal_parameter
# CHECK-NOT: DW_TAG
# CHECK: DW_AT_location [DW_FORM_sec_offset] ({{.*}}
# CHECK-NEXT: [0x00000000, 0x0000000a) ".text": DW_OP_consts +0, DW_OP_stack_value
# CHECK-NEXT: [0x0000000a, 0x00000017) ".text": DW_OP_consts +1, DW_OP_stack_value)
# CHECK-NEXT: DW_AT_name [DW_FORM_strp]{{.*}}"b"
# CHECK: DW_TAG_compile_unit
# CHECK: DW_AT_low_pc {{.*}} (0x00000020 ".text")
# CHECK: DW_AT_high_pc
@ -50,21 +66,6 @@
# CHECK: DW_AT_location [DW_FORM_exprloc]
# CHECK-NOT: DW_AT_location
#
# CHECK: DW_TAG_compile_unit
# CHECK: DW_AT_low_pc {{.*}} (0x00000000 ".text")
# CHECK: DW_AT_high_pc
#
# CHECK: DW_TAG_subprogram
# CHECK-NOT: DW_TAG
# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3bari"
# CHECK-NOT: {{DW_TAG|NULL}}
# CHECK: DW_TAG_formal_parameter
# CHECK-NOT: DW_TAG
# CHECK: DW_AT_location [DW_FORM_sec_offset] ({{.*}}
# CHECK-NEXT: [0x00000000, 0x0000000a) ".text": DW_OP_consts +0, DW_OP_stack_value
# CHECK-NEXT: [0x0000000a, 0x00000017) ".text": DW_OP_consts +1, DW_OP_stack_value)
# CHECK-NEXT: DW_AT_name [DW_FORM_strp]{{.*}}"b"
#
# CHECK: .debug_loc contents:
# CHECK: 0x00000000:
# CHECK-NEXT: (0x00000000, 0x0000000a): DW_OP_consts +0, DW_OP_stack_value

View File

@ -8,22 +8,22 @@
; -- alignment --
; CHECK-NEXT: .zero 4,255
; <text section> - it should have made one span covering all functions in this CU.
; CHECK-NEXT: .quad .Lfunc_begin0
; CHECK-NEXT: .quad .Lsec_end0-.Lfunc_begin0
; <data section> - it should have made one span covering all vars in this CU.
; CHECK-NEXT: .quad some_data
; CHECK-NEXT: .quad .Lsec_end0-some_data
; CHECK-NEXT: .quad .Lsec_end1-some_data
; <other sections> - it should have made one span covering all vars in this CU.
; CHECK-NEXT: .quad some_other
; CHECK-NEXT: .quad .Lsec_end1-some_other
; CHECK-NEXT: .quad .Lsec_end2-some_other
; <common symbols> - it should have made one span for each symbol.
; CHECK-NEXT: .quad some_bss
; CHECK-NEXT: .quad 4
; <text section> - it should have made one span covering all functions in this CU.
; CHECK-NEXT: .quad .Lfunc_begin0
; CHECK-NEXT: .quad .Lsec_end2-.Lfunc_begin0
; -- finish --
; CHECK-NEXT: # ARange terminator

View File

@ -17,10 +17,10 @@
; This assumes the variable will appear before the function.
; LINKAGE1: .section .debug_info
; LINKAGE1: DW_TAG_variable
; LINKAGE1: DW_TAG_subprogram
; LINKAGE1-NOT: DW_TAG
; LINKAGE1: {{DW_AT_(MIPS_)?linkage_name}}
; LINKAGE1: DW_TAG_subprogram
; LINKAGE1: DW_TAG_variable
; LINKAGE1-NOT: DW_TAG
; LINKAGE1: {{DW_AT_(MIPS_)?linkage_name}}
; LINKAGE1: .section

View File

@ -3,21 +3,21 @@
; RUN: llc %s -filetype=obj -o - | llvm-dwarfdump - | FileCheck %s
; CHECK: [[MYMOD:0x[0-9a-f]+]]: DW_TAG_module
; CHECK: DW_AT_name ("mymod")
; CHECK: [[VAR1:0x[0-9a-f]+]]: DW_TAG_variable
; CHECK: DW_AT_name ("var1")
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("main")
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("use_renamed")
; CHECK: DW_TAG_imported_module
; CHECK: DW_AT_import ([[MYMOD]])
; CHECK: DW_AT_import ([[MYMOD:0x[0-9a-f]+]])
; CHECK: DW_TAG_imported_declaration
; CHECK: DW_AT_import ([[VAR1]])
; CHECK: DW_AT_import ([[VAR1:0x[0-9a-f]+]])
; CHECK: DW_AT_name ("var4")
; CHECK: [[MYMOD]]: DW_TAG_module
; CHECK: DW_AT_name ("mymod")
; CHECK: [[VAR1]]: DW_TAG_variable
; CHECK: DW_AT_name ("var1")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;This test case is generated from
;;module mymod

View File

@ -54,12 +54,7 @@
; FISSION-LABEL: .debug_info.dwo contents:
; CHECK: Compile Unit: length = [[CU_SIZE:[0-9a-f]+]]
; CHECK: [[BAR:^0x........]]: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_declaration
; CHECK-NEXT: DW_AT_signature {{.*}} (0x1d02f3be30cc5688)
; CHECK: [[FLUFFY:^0x........]]: DW_TAG_class_type
; CHECK-NEXT: DW_AT_declaration
; CHECK-NEXT: DW_AT_signature {{.*}} (0xb04af47397402e77)
; CHECK: DW_TAG_structure_type
; Ensure the CU-local type 'walrus' is not placed in a type unit.
; CHECK: [[WALRUS:^0x........]]: DW_TAG_structure_type
@ -68,6 +63,13 @@
; CHECK-NEXT: DW_AT_decl_file
; CHECK-NEXT: DW_AT_decl_line
; CHECK: [[BAR:^0x........]]: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_declaration
; CHECK-NEXT: DW_AT_signature {{.*}} (0x1d02f3be30cc5688)
; CHECK: [[FLUFFY:^0x........]]: DW_TAG_class_type
; CHECK-NEXT: DW_AT_declaration
; CHECK-NEXT: DW_AT_signature {{.*}} (0xb04af47397402e77)
; CHECK: [[WOMBAT:^0x........]]: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_declaration
; CHECK-NEXT: DW_AT_signature {{.*}} (0xfd756cee88f8a118)
@ -121,10 +123,10 @@
; CHECK-LABEL: .debug_line contents:
; CHECK: Line table prologue
; CHECK-NOT: file_names[
; SINGLE: file_names[
; SINGLE-NEXT: name: "bar.h"
; CHECK: file_names[
; CHECK-NEXT: name: "bar.cpp"
; SINGLE: file_names[
; SINGLE-NEXT: name: "bar.h"
; CHECK-NOT: file_names[
; FISSION: .debug_line.dwo contents:

View File

@ -77,9 +77,6 @@
; CHECK: DW_AT_GNU_pubnames (true)
; CHECK-NOT: DW_AT_GNU_pubtypes [
; CHECK: [[STATIC_MEM_VAR:0x[0-9a-f]+]]: DW_TAG_variable
; CHECK: DW_AT_specification {{.*}} "static_member_variable"
; CHECK: [[C:0x[0-9a-f]+]]: DW_TAG_structure_type
; CHECK: DW_AT_name ("C")
; CHECK: DW_TAG_member
@ -98,11 +95,23 @@
; CHECK: DW_AT_name ("int")
; CHECK: DW_TAG_pointer_type
; CHECK: [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable
; CHECK: DW_AT_name ("global_variable")
; CHECK: [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_specification {{.*}} "_ZN1C15member_functionEv"
; CHECK: DW_TAG_formal_parameter
; CHECK: NULL
; CHECK: [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_specification {{.*}} "_ZN1C22static_member_functionEv"
; CHECK: [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_linkage_name
; CHECK: DW_AT_name ("global_function")
; CHECK: [[NS:0x[0-9a-f]+]]: DW_TAG_namespace
; CHECK: DW_AT_name ("ns")
; CHECK: [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_linkage_name
; CHECK: DW_AT_name ("global_namespace_function")
; CHECK: [[GLOB_NS_VAR:0x[0-9a-f]+]]: DW_TAG_variable
; CHECK: DW_AT_name ("global_namespace_variable")
; CHECK-NOT: DW_AT_specification
@ -118,9 +127,6 @@
; CHECK: DW_TAG_member
; CHECK: NULL
; CHECK: DW_TAG_variable
; CHECK: [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_linkage_name
; CHECK: DW_AT_name ("global_namespace_function")
; CHECK: NULL
; CHECK: DW_TAG_subprogram
@ -130,6 +136,13 @@
; CHECK: DW_AT_location
; CHECK: NULL
; CHECK: DW_TAG_subprogram
; CHECK: [[STATIC_MEM_VAR:0x[0-9a-f]+]]: DW_TAG_variable
; CHECK: DW_AT_specification {{.*}} "static_member_variable"
; CHECK: [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable
; CHECK: DW_AT_name ("global_variable")
; CHECK: [[ANON:.*]]: DW_TAG_namespace
; CHECK-NOT: DW_AT_name
; CHECK: [[ANON_I:.*]]: DW_TAG_variable
@ -171,20 +184,6 @@
; CHECK: NULL
; CHECK: DW_TAG_imported_declaration
; CHECK: [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_specification {{.*}} "_ZN1C15member_functionEv"
; CHECK: DW_TAG_formal_parameter
; CHECK: NULL
; CHECK: [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_specification {{.*}} "_ZN1C22static_member_functionEv"
; CHECK: [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
; CHECK: DW_AT_linkage_name
; CHECK: DW_AT_name ("global_function")
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_pointer_type
; CHECK: DW_TAG_pointer_type
; CHECK: NULL

View File

@ -32,8 +32,6 @@
; CHECK: DW_TAG_lexical_block
; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_TAG_variable
; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_TAG_imported_module
;; Abstract "bar" function
; CHECK: [[Offset_bar]]: DW_TAG_subprogram
@ -60,9 +58,6 @@
; CHECK: DW_TAG_lexical_block
; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_TAG_variable
; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_TAG_imported_module
; Function Attrs: alwaysinline nounwind
define i32 @_Z3barv() #0 !dbg !4 {

View File

@ -1,7 +1,7 @@
; RUN: llc -mtriple=x86_64-macosx %s -o %t -filetype=obj
; RUN: llvm-dwarfdump -v -debug-info %t | FileCheck %s
; CHECK: DW_TAG_subprogram [9] *
; CHECK: DW_TAG_subprogram [8] *
; CHECK-NOT: DW_AT_{{(MIPS_)?}}linkage_name
; CHECK: DW_AT_specification

View File

@ -4,10 +4,11 @@
; RUN: llc -O0 -mtriple=x86_64-unknown-linux-gnu %s -filetype=obj -o %t.o
; RUN: llvm-dwarfdump %t.o | FileCheck %s
;
; CHECK: [[ITEM1:0x.+]]: DW_TAG_variable
; CHECK: DW_AT_name ("a")
; CHECK: [[ITEM2:0x.+]]: DW_TAG_variable
; CHECK: DW_AT_name ("b")
; CHECK: DW_TAG_variable
; CHECK: [[ITEM1:0x.+]]: DW_TAG_variable
; CHECK: DW_AT_name ("a")
; CHECK: DW_TAG_namelist
; CHECK: DW_AT_name ("nml")
; CHECK: DW_TAG_namelist_item

View File

@ -3,8 +3,8 @@
; Based on the debuginfo-tests/sret.cpp code.
; CHECK-DWO: DW_AT_GNU_dwo_id (0xa58a336e896549f1)
; CHECK-DWO: DW_AT_GNU_dwo_id (0xa58a336e896549f1)
; CHECK-DWO: DW_AT_GNU_dwo_id (0x46a03e2a3394ce47)
; CHECK-DWO: DW_AT_GNU_dwo_id (0x46a03e2a3394ce47)
; RUN: llc -O0 -fast-isel=true -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,FASTISEL %s
; RUN: llc -O0 -fast-isel=false -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,SDAG %s

View File

@ -35,12 +35,12 @@
; Check that there are no verifier failures, and that the SP for "main" appears
; in the correct CU.
; CHECK-LABEL: DW_TAG_compile_unit
; CHECK: DW_AT_name ("1.cpp")
; CHECK-NOT: DW_AT_name ("main")
; CHECK-LABEL: DW_TAG_compile_unit
; CHECK: DW_AT_name ("2.cpp")
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("main")
; CHECK-LABEL: DW_TAG_compile_unit
; CHECK: DW_AT_name ("1.cpp")
; CHECK-NOT: DW_AT_name ("main")
source_filename = "ld-temp.o"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

View File

@ -15,26 +15,10 @@
; VERIFY-NOT: error:
; CHECK: [[INT:0x[0-9a-f]*]]:{{ *}}DW_TAG_base_type
; CHECK-NEXT: DW_AT_name{{.*}} = "int"
; CHECK: DW_TAG_structure_type
; CHECK: DW_AT_name{{.*}}"y_impl<int>"
; CHECK-NOT: {{TAG|NULL}}
; CHECK: DW_TAG_template_type_parameter
; CHECK: DW_TAG_variable
; CHECK-NEXT: DW_AT_name{{.*}}"var"
; CHECK-NOT: NULL
; CHECK: DW_TAG_template_type_parameter
; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]}
; CHECK-NEXT: DW_AT_name{{.*}}= "T"
; CHECK: DW_AT_name{{.*}}"func<3, &glbl, y_impl, nullptr, E, 1, 2>"
; CHECK-NOT: NULL
; CHECK: DW_TAG_template_value_parameter
; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]}
; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT:0x[0-9a-f]*]]}
; CHECK-NEXT: DW_AT_name{{.*}}= "x"
; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata]{{.*}}(3)
@ -71,6 +55,21 @@
; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]}
; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata]{{.*}}(2)
; CHECK: [[INT]]:{{ *}}DW_TAG_base_type
; CHECK-NEXT: DW_AT_name{{.*}} = "int"
; CHECK: DW_TAG_structure_type
; CHECK: DW_AT_name{{.*}}"y_impl<int>"
; CHECK-NOT: {{TAG|NULL}}
; CHECK: DW_TAG_template_type_parameter
; CHECK: DW_TAG_variable
; CHECK-NEXT: DW_AT_name{{.*}}"var"
; CHECK-NOT: NULL
; CHECK: DW_TAG_template_type_parameter
; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]}
; CHECK-NEXT: DW_AT_name{{.*}}= "T"
; CHECK: [[INTPTR]]:{{ *}}DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type{{.*}} => {[[INT]]}

View File

@ -30,33 +30,45 @@
; that here instead of raw assembly printing
; FISSION: .section .debug_info.dwo,
; 3 bytes of data in this DW_FORM_exprloc representation of the location of 'tls'
; FISSION: .byte 3{{ *}}# DW_AT_location
; DW_OP_GNU_const_index (0xfx == 252) to refer to the debug_addr table
; FISSION-NEXT: .byte 252
; an index of zero into the debug_addr table
; FISSION-NEXT: .byte 0
; SINGLE: .section .debug_info,
; DARWIN: .section {{.*}}debug_info,
; SINGLE-64: DW_TAG_variable
; 10 bytes of data in this DW_FORM_exprloc representation of the location of 'tls'
; SINGLE-64: .byte 10 # DW_AT_location
; DW_OP_const8u (0x0e == 14) of address
; SINGLE-64-NEXT: .byte 14
; SINGLE-64-NEXT: .quad tls@DTPOFF
; DARWIN: DW_TAG_variable
; DARWIN: .byte 10 ## DW_AT_location
; DW_OP_const8u (0x0e == 14) of address
; DARWIN-NEXT: .byte 14
; DARWIN-NEXT: .quad _tls
; SINGLE-32: DW_TAG_variable
; 6 bytes of data in 32-bit mode
; SINGLE-32: .byte 6 # DW_AT_location
; DW_OP_const4u (0x0e == 12) of address
; SINGLE-32-NEXT: .byte 12
; SINGLE-32-NEXT: .long tls@DTPOFF
; FISSION: DW_TAG_template_value_parameter
; FISSION: .byte 3 # DW_AT_location
; DW_OP_GNU_addr_index
; FISSION-NEXT: .byte 251
; FISSION-NEXT: .byte 2
; DW_OP_stack_value
; FISSION-NEXT: .byte 159
; FISSION: DW_TAG_variable
; 3 bytes of data in this DW_FORM_exprloc representation of the location of 'tls'
; FISSION: .byte 3{{ *}}# DW_AT_location
; DW_OP_GNU_const_index (0xfx == 252) to refer to the debug_addr table
; FISSION-NEXT: .byte 252
; an index of 1 into the debug_addr table
; FISSION-NEXT: .byte 1
; DW_OP_GNU_push_tls_address
; GNUOP-NEXT: .byte 224
; DW_OP_form_tls_address
@ -66,19 +78,12 @@
; FISSION: .byte 2 # DW_AT_location
; DW_OP_GNU_addr_index
; FISSION-NEXT: .byte 251
; FISSION-NEXT: .byte 1
; FISSION: DW_TAG_template_value_parameter
; FISSION: .byte 3 # DW_AT_location
; DW_OP_GNU_addr_index
; FISSION-NEXT: .byte 251
; FISSION-NEXT: .byte 1
; DW_OP_stack_value
; FISSION-NEXT: .byte 159
; FISSION-NEXT: .byte 2
; check that the expected TLS address description is the first thing in the debug_addr section
; FISSION: .section .debug_addr
; FISSION-NEXT: .Laddr_table_base0:
; FISSION-NEXT: .quad .Lfunc_begin0
; FISSION-NEXT: .quad tls@DTPOFF
; FISSION-NEXT: .quad glbl
; FISSION-NOT: .quad glbl

View File

@ -1,4 +1,7 @@
; RUN: llc -mtriple=x86_64-apple-darwin %s -o - -filetype=obj | llvm-dwarfdump - | FileCheck %s
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_variable
; CHECK: 0x00000[[G:.*]]: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("g")
; CHECK: DW_TAG_array_type

View File

@ -43,37 +43,6 @@ attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
!llvm.module.flags = !{!10, !11, !12, !13, !14}
!llvm.ident = !{!15}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "g1", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true, annotations: !7)
; CHECK: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("g1")
; CHECK: DW_TAG_LLVM_annotation
; CHECK-NEXT: DW_AT_name ("btf_decl_tag")
; CHECK-NEXT: DW_AT_const_value ("tag1")
; CHECK-EMPTY:
; CHECK-NEXT: DW_TAG_LLVM_annotation
; CHECK-NEXT: DW_AT_name ("btf_decl_tag")
; CHECK-NEXT: DW_AT_const_value ("tag2")
; CHECK-EMPTY:
; CHECK-NEXT: NULL
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, splitDebugInlining: false, nameTableKind: None)
!3 = !DIFile(filename: "t.c", directory: "/tmp/home/yhs/work/tests/llvm/btf_tag")
!4 = !{}
!5 = !{!0}
!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!7 = !{!8, !9}
!8 = !{!"btf_decl_tag", !"tag1"}
!9 = !{!"btf_decl_tag", !"tag2"}
!10 = !{i32 7, !"Dwarf Version", i32 4}
!11 = !{i32 2, !"Debug Info Version", i32 3}
!12 = !{i32 1, !"wchar_size", i32 4}
!13 = !{i32 7, !"uwtable", i32 1}
!14 = !{i32 7, !"frame-pointer", i32 2}
!15 = !{!"clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)"}
!16 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 10, type: !17, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4, annotations: !7)
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("foo")
; CHECK: DW_TAG_formal_parameter
@ -97,12 +66,17 @@ attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
; CHECK-EMPTY:
; CHECK-NEXT: NULL
!17 = !DISubroutineType(types: !18)
!18 = !{!6, !19}
!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1", file: !3, line: 4, size: 32, elements: !21, annotations: !7)
!21 = !{!22}
!22 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !20, file: !3, line: 5, baseType: !6, size: 32, annotations: !7)
; CHECK: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("g1")
; CHECK: DW_TAG_LLVM_annotation
; CHECK-NEXT: DW_AT_name ("btf_decl_tag")
; CHECK-NEXT: DW_AT_const_value ("tag1")
; CHECK-EMPTY:
; CHECK-NEXT: DW_TAG_LLVM_annotation
; CHECK-NEXT: DW_AT_name ("btf_decl_tag")
; CHECK-NEXT: DW_AT_const_value ("tag2")
; CHECK-EMPTY:
; CHECK-NEXT: NULL
; CHECK: DW_TAG_structure_type
; CHECK-NEXT: DW_AT_name ("t1")
@ -128,6 +102,29 @@ attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
; CHECK-EMPTY:
; CHECK-NEXT: NULL
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "g1", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true, annotations: !7)
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, splitDebugInlining: false, nameTableKind: None)
!3 = !DIFile(filename: "t.c", directory: "/tmp/home/yhs/work/tests/llvm/btf_tag")
!4 = !{}
!5 = !{!0}
!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!7 = !{!8, !9}
!8 = !{!"btf_decl_tag", !"tag1"}
!9 = !{!"btf_decl_tag", !"tag2"}
!10 = !{i32 7, !"Dwarf Version", i32 4}
!11 = !{i32 2, !"Debug Info Version", i32 3}
!12 = !{i32 1, !"wchar_size", i32 4}
!13 = !{i32 7, !"uwtable", i32 1}
!14 = !{i32 7, !"frame-pointer", i32 2}
!15 = !{!"clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)"}
!16 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 10, type: !17, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4, annotations: !7)
!17 = !DISubroutineType(types: !18)
!18 = !{!6, !19}
!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1", file: !3, line: 4, size: 32, elements: !21, annotations: !7)
!21 = !{!22}
!22 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !20, file: !3, line: 5, baseType: !6, size: 32, annotations: !7)
!23 = !DILocalVariable(name: "arg", arg: 1, scope: !16, file: !3, line: 10, type: !19, annotations: !7)
!24 = !DILocation(line: 10, column: 48, scope: !16)
!25 = !DILocation(line: 11, column: 10, scope: !16)

View File

@ -154,20 +154,20 @@
; CHECK-NEXT: 0x16 R_WASM_SECTION_OFFSET_I32 .debug_line 0
; CHECK-NEXT: 0x1A R_WASM_SECTION_OFFSET_I32 .debug_str 62
; CHECK-NEXT: 0x1E R_WASM_FUNCTION_OFFSET_I32 f2 0
; CHECK-NEXT: 0x27 R_WASM_SECTION_OFFSET_I32 .debug_str 105
; CHECK-NEXT: 0x33 R_WASM_MEMORY_ADDR_I32 foo 0
; CHECK-NEXT: 0x3D R_WASM_SECTION_OFFSET_I32 .debug_str 109
; CHECK-NEXT: 0x44 R_WASM_SECTION_OFFSET_I32 .debug_str 113
; CHECK-NEXT: 0x50 R_WASM_MEMORY_ADDR_I32 ptr2 0
; CHECK-NEXT: 0x5B R_WASM_FUNCTION_OFFSET_I32 f2 0
; CHECK-NEXT: 0x66 R_WASM_GLOBAL_INDEX_I32 __stack_pointer
; CHECK-NEXT: 0x6B R_WASM_SECTION_OFFSET_I32 .debug_str 118
; CHECK-NEXT: 0x27 R_WASM_FUNCTION_OFFSET_I32 f2 0
; CHECK-NEXT: 0x32 R_WASM_GLOBAL_INDEX_I32 __stack_pointer
; CHECK-NEXT: 0x37 R_WASM_SECTION_OFFSET_I32 .debug_str 118
; CHECK-NEXT: 0x3E R_WASM_SECTION_OFFSET_I32 .debug_str 105
; CHECK-NEXT: 0x4A R_WASM_MEMORY_ADDR_I32 foo 0
; CHECK-NEXT: 0x54 R_WASM_SECTION_OFFSET_I32 .debug_str 109
; CHECK-NEXT: 0x5B R_WASM_SECTION_OFFSET_I32 .debug_str 113
; CHECK-NEXT: 0x67 R_WASM_MEMORY_ADDR_I32 ptr2 0
; CHECK-NEXT: }
; CHECK-NEXT: Section (10) .debug_aranges {
; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0
; CHECK-NEXT: 0x10 R_WASM_MEMORY_ADDR_I32 foo 0
; CHECK-NEXT: 0x18 R_WASM_MEMORY_ADDR_I32 ptr2 0
; CHECK-NEXT: 0x20 R_WASM_FUNCTION_OFFSET_I32 f2 0
; CHECK-NEXT: 0x10 R_WASM_FUNCTION_OFFSET_I32 f2 0
; CHECK-NEXT: 0x18 R_WASM_MEMORY_ADDR_I32 foo 0
; CHECK-NEXT: 0x20 R_WASM_MEMORY_ADDR_I32 ptr2 0
; CHECK-NEXT: }
; CHECK-NEXT: Section (12) .debug_pubnames {
; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0

View File

@ -160,20 +160,20 @@
; CHECK-NEXT: 0x16 R_WASM_SECTION_OFFSET_I32 .debug_line 0
; CHECK-NEXT: 0x1A R_WASM_SECTION_OFFSET_I32 .debug_str 62
; CHECK-NEXT: 0x1E R_WASM_FUNCTION_OFFSET_I64 f2 0
; CHECK-NEXT: 0x2B R_WASM_SECTION_OFFSET_I32 .debug_str 105
; CHECK-NEXT: 0x37 R_WASM_MEMORY_ADDR_I64 foo 0
; CHECK-NEXT: 0x45 R_WASM_SECTION_OFFSET_I32 .debug_str 109
; CHECK-NEXT: 0x4C R_WASM_SECTION_OFFSET_I32 .debug_str 113
; CHECK-NEXT: 0x58 R_WASM_MEMORY_ADDR_I64 ptr2 0
; CHECK-NEXT: 0x67 R_WASM_FUNCTION_OFFSET_I64 f2 0
; CHECK-NEXT: 0x76 R_WASM_GLOBAL_INDEX_I32 __stack_pointer
; CHECK-NEXT: 0x7B R_WASM_SECTION_OFFSET_I32 .debug_str 118
; CHECK-NEXT: 0x2B R_WASM_FUNCTION_OFFSET_I64 f2 0
; CHECK-NEXT: 0x3A R_WASM_GLOBAL_INDEX_I32 __stack_pointer
; CHECK-NEXT: 0x3F R_WASM_SECTION_OFFSET_I32 .debug_str 118
; CHECK-NEXT: 0x46 R_WASM_SECTION_OFFSET_I32 .debug_str 105
; CHECK-NEXT: 0x52 R_WASM_MEMORY_ADDR_I64 foo 0
; CHECK-NEXT: 0x60 R_WASM_SECTION_OFFSET_I32 .debug_str 109
; CHECK-NEXT: 0x67 R_WASM_SECTION_OFFSET_I32 .debug_str 113
; CHECK-NEXT: 0x73 R_WASM_MEMORY_ADDR_I64 ptr2 0
; CHECK-NEXT: }
; CHECK-NEXT: Section (10) .debug_aranges {
; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0
; CHECK-NEXT: 0x10 R_WASM_MEMORY_ADDR_I64 foo 0
; CHECK-NEXT: 0x20 R_WASM_MEMORY_ADDR_I64 ptr2 0
; CHECK-NEXT: 0x30 R_WASM_FUNCTION_OFFSET_I64 f2 0
; CHECK-NEXT: 0x10 R_WASM_FUNCTION_OFFSET_I64 f2 0
; CHECK-NEXT: 0x20 R_WASM_MEMORY_ADDR_I64 foo 0
; CHECK-NEXT: 0x30 R_WASM_MEMORY_ADDR_I64 ptr2 0
; CHECK-NEXT: }
; CHECK-NEXT: Section (12) .debug_pubnames {
; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0

View File

@ -15,37 +15,7 @@
; CHECK-NEXT: DW_AT_low_pc (0x00000002)
; CHECK-NEXT: DW_AT_high_pc (0x00000004)
; CHECK: 0x00000026: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("foo")
; CHECK-NEXT: DW_AT_type (0x00000037 "int *")
; CHECK-NEXT: DW_AT_external (true)
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line (4)
; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x0)
; CHECK: 0x00000037: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x0000003c "int")
; CHECK: 0x0000003c: DW_TAG_base_type
; CHECK-NEXT: DW_AT_name ("int")
; CHECK-NEXT: DW_AT_encoding (DW_ATE_signed)
; CHECK-NEXT: DW_AT_byte_size (0x04)
; CHECK: 0x00000043: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("ptr2")
; CHECK-NEXT: DW_AT_type (0x00000054 "void (*)()")
; CHECK-NEXT: DW_AT_external (true)
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line (5)
; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x4)
; CHECK: 0x00000054: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x00000059 "void ()")
; CHECK: 0x00000059: DW_TAG_subroutine_type
; CHECK-NEXT: DW_AT_prototyped (true)
; CHECK: 0x0000005a: DW_TAG_subprogram
; CHECK: 0x00000026: DW_TAG_subprogram
; CHECK-NEXT: DW_AT_low_pc (0x00000002)
; CHECK-NEXT: DW_AT_high_pc (0x00000004)
; CHECK-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value)
@ -55,6 +25,36 @@
; CHECK-NEXT: DW_AT_prototyped (true)
; CHECK-NEXT: DW_AT_external (true)
; CHECK: 0x0000003d: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("foo")
; CHECK-NEXT: DW_AT_type (0x0000004e "int *")
; CHECK-NEXT: DW_AT_external (true)
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line (4)
; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x0)
; CHECK: 0x0000004e: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x00000053 "int")
; CHECK: 0x00000053: DW_TAG_base_type
; CHECK-NEXT: DW_AT_name ("int")
; CHECK-NEXT: DW_AT_encoding (DW_ATE_signed)
; CHECK-NEXT: DW_AT_byte_size (0x04)
; CHECK: 0x0000005a: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("ptr2")
; CHECK-NEXT: DW_AT_type (0x0000006b "void (*)()")
; CHECK-NEXT: DW_AT_external (true)
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line (5)
; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x4)
; CHECK: 0x0000006b: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x00000070 "void ()")
; CHECK: 0x00000070: DW_TAG_subroutine_type
; CHECK-NEXT: DW_AT_prototyped (true)
; CHECK: 0x00000071: NULL
@ -66,40 +66,10 @@
; SPLIT-NEXT: DW_AT_language (DW_LANG_C99)
; SPLIT-NEXT: DW_AT_name ("test.c")
; SPLIT-NEXT: DW_AT_GNU_dwo_name ("{{.*}}dwarfdump.ll.tmp.dwo")
; SPLIT-NEXT: DW_AT_GNU_dwo_id (0xad3151f12153fa17)
; SPLIT-NEXT: DW_AT_GNU_dwo_id (0x0642bb5dada25ca6)
; SPLIT: 0x00000019: DW_TAG_variable
; SPLIT-NEXT: DW_AT_name ("foo")
; SPLIT-NEXT: DW_AT_type (0x00000024 "int *")
; SPLIT-NEXT: DW_AT_external (true)
; SPLIT-NEXT: DW_AT_decl_file (0x01)
; SPLIT-NEXT: DW_AT_decl_line (4)
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x0)
; SPLIT: 0x00000024: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x00000029 "int")
; SPLIT: 0x00000029: DW_TAG_base_type
; SPLIT-NEXT: DW_AT_name ("int")
; SPLIT-NEXT: DW_AT_encoding (DW_ATE_signed)
; SPLIT-NEXT: DW_AT_byte_size (0x04)
; SPLIT: 0x0000002d: DW_TAG_variable
; SPLIT-NEXT: DW_AT_name ("ptr2")
; SPLIT-NEXT: DW_AT_type (0x00000038 "void (*)()")
; SPLIT-NEXT: DW_AT_external (true)
; SPLIT-NEXT: DW_AT_decl_file (0x01)
; SPLIT-NEXT: DW_AT_decl_line (5)
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x1)
; SPLIT: 0x00000038: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x0000003d "void ()")
; SPLIT: 0x0000003d: DW_TAG_subroutine_type
; SPLIT-NEXT: DW_AT_prototyped (true)
; SPLIT: 0x0000003e: DW_TAG_subprogram
; SPLIT-NEXT: DW_AT_low_pc (indexed (00000002) address = <unresolved>)
; SPLIT: 0x00000019: DW_TAG_subprogram
; SPLIT-NEXT: DW_AT_low_pc (indexed (00000000) address = <unresolved>)
; SPLIT-NEXT: DW_AT_high_pc (0x00000002)
; SPLIT-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value)
; SPLIT-NEXT: DW_AT_name ("f2")
@ -108,6 +78,36 @@
; SPLIT-NEXT: DW_AT_prototyped (true)
; SPLIT-NEXT: DW_AT_external (true)
; SPLIT: 0x0000002a: DW_TAG_variable
; SPLIT-NEXT: DW_AT_name ("foo")
; SPLIT-NEXT: DW_AT_type (0x00000035 "int *")
; SPLIT-NEXT: DW_AT_external (true)
; SPLIT-NEXT: DW_AT_decl_file (0x01)
; SPLIT-NEXT: DW_AT_decl_line (4)
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x1)
; SPLIT: 0x00000035: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x0000003a "int")
; SPLIT: 0x0000003a: DW_TAG_base_type
; SPLIT-NEXT: DW_AT_name ("int")
; SPLIT-NEXT: DW_AT_encoding (DW_ATE_signed)
; SPLIT-NEXT: DW_AT_byte_size (0x04)
; SPLIT: 0x0000003e: DW_TAG_variable
; SPLIT-NEXT: DW_AT_name ("ptr2")
; SPLIT-NEXT: DW_AT_type (0x00000049 "void (*)()")
; SPLIT-NEXT: DW_AT_external (true)
; SPLIT-NEXT: DW_AT_decl_file (0x01)
; SPLIT-NEXT: DW_AT_decl_line (5)
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x2)
; SPLIT: 0x00000049: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x0000004e "void ()")
; SPLIT: 0x0000004e: DW_TAG_subroutine_type
; SPLIT-NEXT: DW_AT_prototyped (true)
; SPLIT: 0x0000004f: NULL

View File

@ -14,37 +14,7 @@
; CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002)
; CHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x00000002)
; CHECK: 0x0000002a: DW_TAG_variable
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("foo")
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000003f "int *")
; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true)
; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (4)
; CHECK-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x0)
; CHECK: 0x0000003f: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000044 "int")
; CHECK: 0x00000044: DW_TAG_base_type
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("int")
; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04)
; CHECK: 0x0000004b: DW_TAG_variable
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("ptr2")
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000060 "void (*)()")
; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true)
; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (5)
; CHECK-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x8)
; CHECK: 0x00000060: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000065 "void ()")
; CHECK: 0x00000065: DW_TAG_subroutine_type
; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true)
; CHECK: 0x00000066: DW_TAG_subprogram
; CHECK: 0x0000002a: DW_TAG_subprogram
; CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002)
; CHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x00000002)
; CHECK-NEXT: DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value)
@ -54,6 +24,36 @@
; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true)
; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true)
; CHECK: 0x00000045: DW_TAG_variable
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("foo")
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000005a "int *")
; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true)
; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (4)
; CHECK-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x0)
; CHECK: 0x0000005a: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000005f "int")
; CHECK: 0x0000005f: DW_TAG_base_type
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("int")
; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04)
; CHECK: 0x00000066: DW_TAG_variable
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("ptr2")
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000007b "void (*)()")
; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true)
; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (5)
; CHECK-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x8)
; CHECK: 0x0000007b: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000080 "void ()")
; CHECK: 0x00000080: DW_TAG_subroutine_type
; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true)
; CHECK: 0x00000081: NULL
target triple = "wasm64-unknown-unknown"