235 changes: 134 additions & 101 deletions llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ void DwarfDebug::addSubprogramNames(const DICompileUnit &CU,
// well into the name table. Only do that if we are going to actually emit
// that name.
if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName() &&
(useAllLinkageNames() || InfoHolder.getAbstractSPDies().lookup(SP)))
(useAllLinkageNames() || InfoHolder.getAbstractScopeDIEs().lookup(SP)))
addAccelName(CU, SP->getLinkageName(), Die);

// If this is an Objective-C selector name add it to the ObjC accelerator
Expand Down Expand Up @@ -1067,6 +1067,45 @@ void DwarfDebug::finishUnitAttributes(const DICompileUnit *DIUnit,
}
}
}

// Collect local scopes that contain any local declarations
// (excluding local variables) to be sure they will be emitted
// (see DwarfCompileUnit::createAndAddScopeChildren() for details).
static void collectLocalScopesWithDeclsFromCU(const DICompileUnit *CUNode,
DwarfCompileUnit &CU) {
auto getLocalScope = [](const DIScope *S) -> const DILocalScope * {
if (!S)
return nullptr;
if (isa<DICommonBlock>(S))
S = S->getScope();
if (const auto *LScope = dyn_cast_or_null<DILocalScope>(S))
return LScope->getNonLexicalBlockFileScope();
return nullptr;
};

for (auto *GVE : CUNode->getGlobalVariables())
if (auto *LScope = getLocalScope(GVE->getVariable()->getScope()))
CU.recordLocalScopeWithDecls(LScope);

for (auto *Ty : CUNode->getEnumTypes())
if (auto *LScope = getLocalScope(Ty->getScope()))
CU.recordLocalScopeWithDecls(LScope);

for (auto *Ty : CUNode->getRetainedTypes())
if (DIType *RT = dyn_cast<DIType>(Ty))
if (auto *LScope = getLocalScope(RT->getScope()))
CU.recordLocalScopeWithDecls(LScope);

for (auto *IE : CUNode->getImportedEntities())
if (auto *LScope = getLocalScope(IE->getScope()))
CU.recordLocalScopeWithDecls(LScope);

// FIXME: We know nothing about local records and typedefs here.
// since nothing but local variables (and members of local records)
// references them. So that they will be emitted in a first available
// parent scope DIE.
}

// Create new DwarfCompileUnit for the given metadata node with tag
// DW_TAG_compile_unit.
DwarfCompileUnit &
Expand All @@ -1081,9 +1120,6 @@ DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) {
DwarfCompileUnit &NewCU = *OwnedUnit;
InfoHolder.addUnit(std::move(OwnedUnit));

for (auto *IE : DIUnit->getImportedEntities())
NewCU.addImportedEntity(IE);

// LTO with assembly output shares a single line table amongst multiple CUs.
// To avoid the compilation directory being ambiguous, let the line table
// explicitly describe the directory of all files, never relying on the
Expand All @@ -1103,42 +1139,12 @@ DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) {

CUMap.insert({DIUnit, &NewCU});
CUDieMap.insert({&NewCU.getUnitDie(), &NewCU});
return NewCU;
}

void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
const DIImportedEntity *N) {
if (isa<DILocalScope>(N->getScope()))
return;
if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope()))
D->addChild(TheCU.constructImportedEntityDIE(N));
}
// Record local scopes, that have some globals (static locals),
// imports or types declared within.
collectLocalScopesWithDeclsFromCU(DIUnit, NewCU);

/// 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;
return NewCU;
}

// Emit all Dwarf sections that should come prior to the content. Create
Expand All @@ -1156,14 +1162,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
Expand All @@ -1189,58 +1187,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() {
Expand Down Expand Up @@ -1405,6 +1351,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.
Expand All @@ -1414,9 +1387,69 @@ void DwarfDebug::endModule() {
assert(CurFn == nullptr);
assert(CurMI == nullptr);

for (const auto &P : CUMap) {
auto &CU = *P.second;
CU.createBaseTypeDIEs();
// Collect global variables info.
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())
CU->createAndAddImportedEntityDIE(IE);

CU->createBaseTypeDIEs();
}

// If we aren't actually generating debug info (check beginModule -
Expand Down
12 changes: 5 additions & 7 deletions llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
Original file line number Diff line number Diff line change
Expand Up @@ -316,11 +316,13 @@ class DwarfDebug : public DebugHandlerBase {
/// can refer to them in spite of insertions into this list.
DebugLocStream DebugLocs;

using SubprogramSetVector =
SetVector<const DISubprogram *, SmallVector<const DISubprogram *, 16>,
SmallPtrSet<const DISubprogram *, 16>>;

/// This is a collection of subprogram MDNodes that are processed to
/// create DIEs.
SetVector<const DISubprogram *, SmallVector<const DISubprogram *, 16>,
SmallPtrSet<const DISubprogram *, 16>>
ProcessedSPNodes;
SubprogramSetVector ProcessedSPNodes;

/// If nonnull, stores the current machine function we're processing.
const MachineFunction *CurFn = nullptr;
Expand Down Expand Up @@ -598,10 +600,6 @@ class DwarfDebug : public DebugHandlerBase {
void finishUnitAttributes(const DICompileUnit *DIUnit,
DwarfCompileUnit &NewCU);

/// Construct imported_module or imported_declaration DIE.
void constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
const DIImportedEntity *N);

/// Register a source line with debug info. Returns the unique
/// label that was emitted and which provides correspondence to the
/// source line list.
Expand Down
7 changes: 4 additions & 3 deletions llvm/lib/CodeGen/AsmPrinter/DwarfFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class DbgEntity;
class DbgVariable;
class DbgLabel;
class DINode;
class DILocalScope;
class DwarfCompileUnit;
class DwarfUnit;
class LexicalScope;
Expand Down Expand Up @@ -87,7 +88,7 @@ class DwarfFile {
DenseMap<LexicalScope *, LabelList> ScopeLabels;

// Collection of abstract subprogram DIEs.
DenseMap<const MDNode *, DIE *> AbstractSPDies;
DenseMap<const DILocalScope *, DIE *> AbstractLocalScopeDIEs;
DenseMap<const DINode *, std::unique_ptr<DbgEntity>> AbstractEntities;

/// Maps MDNodes for type system with the corresponding DIEs. These DIEs can
Expand Down Expand Up @@ -162,8 +163,8 @@ class DwarfFile {
return ScopeLabels;
}

DenseMap<const MDNode *, DIE *> &getAbstractSPDies() {
return AbstractSPDies;
DenseMap<const DILocalScope *, DIE *> &getAbstractScopeDIEs() {
return AbstractLocalScopeDIEs;
}

DenseMap<const DINode *, std::unique_ptr<DbgEntity>> &getAbstractEntities() {
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1200,7 +1200,7 @@ bool DwarfUnit::applySubprogramDefinitionAttributes(const DISubprogram *SP,
"decl has a linkage name and it is different");
if (DeclLinkageName.empty() &&
// Always emit it for abstract subprograms.
(DD->useAllLinkageNames() || DU->getAbstractSPDies().lookup(SP)))
(DD->useAllLinkageNames() || DU->getAbstractScopeDIEs().lookup(SP)))
addLinkageName(SPDie, LinkageName);

if (!DeclDie)
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ class DwarfUnit : public DIEUnit {
DIE *getOrCreateTypeDIE(const MDNode *TyNode);

/// Get context owner's DIE.
DIE *getOrCreateContextDIE(const DIScope *Context);
virtual DIE *getOrCreateContextDIE(const DIScope *Context);

/// Construct DIEs for types that contain vtables.
void constructContainingTypeDIEs();
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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}}
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll
Original file line number Diff line number Diff line change
@@ -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}}
Expand Down
31 changes: 16 additions & 15 deletions llvm/test/DebugInfo/AMDGPU/variable-locations.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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}
Expand Down
3 changes: 1 addition & 2 deletions llvm/test/DebugInfo/BPF/extern-void.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 6 additions & 4 deletions llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
4 changes: 4 additions & 0 deletions llvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/DebugInfo/Generic/debug-names-linkage-name.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/DebugInfo/Generic/enum-types.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
72 changes: 72 additions & 0 deletions llvm/test/DebugInfo/Generic/import-inlined-declaration.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump - | FileCheck --implicit-check-not "{{DW_TAG|NULL}}" %s

; namespace ns {
; inline __attribute__((always_inline))
; void foo() { int a = 4; }
; }
;
; void goo() {
; using ns::foo;
; foo();
; }

; Ensure that imported declarations reference the correct subprograms even if
; those subprograms are inlined.

; CHECK: DW_TAG_compile_unit
; CHECK: DW_TAG_namespace
; CHECK: DW_AT_name ("ns")
; CHECK: [[FOO:0x.*]]: DW_TAG_subprogram
; CHECK: DW_AT_name ("foo")
; CHECK: DW_TAG_variable
; CHECK: NULL
; CHECK: NULL
; CHECK: DW_TAG_base_type
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("goo")
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_AT_abstract_origin ([[FOO]]
; CHECK: DW_TAG_variable
; CHECK: NULL
; CHECK: DW_TAG_imported_declaration
; CHECK: DW_AT_import ([[FOO]])
; CHECK: NULL
; CHECK: NULL

; Function Attrs: mustprogress noinline optnone uwtable
define dso_local void @_Z3goov() !dbg !4 {
entry:
%a.i = alloca i32, align 4
call void @llvm.dbg.declare(metadata i32* %a.i, metadata !16, metadata !DIExpression()), !dbg !18
store i32 4, i32* %a.i, align 4, !dbg !18
ret void, !dbg !20
}

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata)

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!10, !11, !12, !13, !14}
!llvm.ident = !{!15}

!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 14.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, imports: !2, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "imported-inlined-declaration.cpp", directory: "")
!2 = !{!3}
!3 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !4, entity: !8, file: !1, line: 7)
!4 = distinct !DISubprogram(name: "goo", linkageName: "_Z3goov", scope: !1, file: !1, line: 6, type: !5, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !7)
!5 = !DISubroutineType(types: !6)
!6 = !{null}
!7 = !{}
!8 = distinct !DISubprogram(name: "foo", linkageName: "_ZN2ns3fooEv", scope: !9, file: !1, line: 3, type: !5, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !7)
!9 = !DINamespace(name: "ns", scope: null)
!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 14.0.0"}
!16 = !DILocalVariable(name: "a", scope: !8, file: !1, line: 3, type: !17)
!17 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!18 = !DILocation(line: 3, column: 18, scope: !8, inlinedAt: !19)
!19 = distinct !DILocation(line: 8, column: 2, scope: !4)
!20 = !DILocation(line: 9, column: 1, scope: !4)
10 changes: 3 additions & 7 deletions llvm/test/DebugInfo/Generic/imported-name-inlined.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,17 @@
; Ensure that top level imported declarations don't produce an extra degenerate
; concrete subprogram definition.

; FIXME: imported entities should only be emitted to the abstract origin if one is present

; CHECK: DW_TAG_compile_unit
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("f1")
; CHECK: DW_TAG_imported_declaration
; CHECK: NULL
; CHECK: DW_TAG_namespace
; CHECK: DW_TAG_subprogram
; CHECK: NULL
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("f2")
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_TAG_imported_declaration
; CHECK: NULL
; CHECK: NULL
; CHECK: DW_TAG_namespace
; CHECK: DW_TAG_subprogram
; CHECK: NULL
; CHECK: NULL

Expand Down
3 changes: 3 additions & 0 deletions llvm/test/DebugInfo/Generic/incorrect-variable-debugloc.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
125 changes: 125 additions & 0 deletions llvm/test/DebugInfo/Generic/inlined-local-type.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck --implicit-check-not "{{DW_TAG|NULL}}" %s

; inline __attribute__((always_inline))
; int removed() { struct A {int i;}; struct A a; return a.i++; }
;
; __attribute__((always_inline))
; int not_removed() { struct B {int i;}; struct B b; return b.i++; }
;
; int foo() { return removed() + not_removed(); }}

; Ensure that function-local types have the correct subprogram parent even if
; those subprograms are inlined.

; CHECK: DW_TAG_compile_unit
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_abstract_origin ({{0x.*}} "not_removed")
; CHECK: DW_TAG_variable
; CHECK: NULL
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("removed")
; CHECK: [[A:0x.*]]: DW_TAG_structure_type
; CHECK: DW_AT_name ("A")
; CHECK: DW_TAG_member
; CHECK: NULL
; CHECK: DW_TAG_variable
; CHECK: DW_AT_type ([[A]] "A")
; CHECK: NULL
; CHECK: DW_TAG_base_type
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("not_removed")
; CHECK: [[B:0x.*]]: DW_TAG_structure_type
; CHECK: DW_AT_name ("B")
; CHECK: DW_TAG_member
; CHECK: NULL
; CHECK: DW_TAG_variable
; CHECK: DW_AT_type ([[B]] "B")
; CHECK: NULL
; CHECK: DW_TAG_subprogram
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_TAG_variable
; CHECK: NULL
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_TAG_variable
; CHECK: NULL
; CHECK: NULL
; CHECK: NULL

%struct.B = type { i32 }
%struct.A = type { i32 }

define dso_local i32 @not_removed() !dbg !12 {
%1 = alloca %struct.B, align 4
call void @llvm.dbg.declare(metadata %struct.B* %1, metadata !18, metadata !DIExpression()), !dbg !22
%2 = getelementptr inbounds %struct.B, %struct.B* %1, i32 0, i32 0, !dbg !23
%3 = load i32, i32* %2, align 4, !dbg !24
%4 = add nsw i32 %3, 1, !dbg !24
store i32 %4, i32* %2, align 4, !dbg !24
ret i32 %3, !dbg !25
}

declare void @llvm.dbg.declare(metadata, metadata, metadata)

define dso_local i32 @foo() !dbg !26 {
%1 = alloca %struct.A, align 4
%2 = alloca %struct.B, align 4
call void @llvm.dbg.declare(metadata %struct.A* %1, metadata !27, metadata !DIExpression()), !dbg !32
%3 = getelementptr inbounds %struct.A, %struct.A* %1, i32 0, i32 0, !dbg !34
%4 = load i32, i32* %3, align 4, !dbg !35
%5 = add nsw i32 %4, 1, !dbg !35
store i32 %5, i32* %3, align 4, !dbg !35
call void @llvm.dbg.declare(metadata %struct.B* %2, metadata !18, metadata !DIExpression()), !dbg !36
%6 = getelementptr inbounds %struct.B, %struct.B* %2, i32 0, i32 0, !dbg !38
%7 = load i32, i32* %6, align 4, !dbg !39
%8 = add nsw i32 %7, 1, !dbg !39
store i32 %8, i32* %6, align 4, !dbg !39
%9 = add nsw i32 %4, %7, !dbg !40
ret i32 %9, !dbg !41
}

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!2, !3, !4, !5, !6, !7, !8, !9, !10}
!llvm.ident = !{!11}

!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 14.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "inlined-local-type.cpp", directory: "")
!2 = !{i32 7, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{i32 1, !"wchar_size", i32 4}
!5 = !{i32 1, !"branch-target-enforcement", i32 0}
!6 = !{i32 1, !"sign-return-address", i32 0}
!7 = !{i32 1, !"sign-return-address-all", i32 0}
!8 = !{i32 1, !"sign-return-address-with-bkey", i32 0}
!9 = !{i32 7, !"uwtable", i32 1}
!10 = !{i32 7, !"frame-pointer", i32 1}
!11 = !{!"clang version 14.0.0"}
!12 = distinct !DISubprogram(name: "not_removed", scope: !13, file: !13, line: 5, type: !14, scopeLine: 5, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !17)
!13 = !DIFile(filename: "inlined-local-type.cpp", directory: "")
!14 = !DISubroutineType(types: !15)
!15 = !{!16}
!16 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!17 = !{}
!18 = !DILocalVariable(name: "b", scope: !12, file: !13, line: 5, type: !19)
!19 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "B", scope: !12, file: !13, line: 5, size: 32, elements: !20)
!20 = !{!21}
!21 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !19, file: !13, line: 5, baseType: !16, size: 32)
!22 = !DILocation(line: 5, column: 49, scope: !12)
!23 = !DILocation(line: 5, column: 61, scope: !12)
!24 = !DILocation(line: 5, column: 62, scope: !12)
!25 = !DILocation(line: 5, column: 52, scope: !12)
!26 = distinct !DISubprogram(name: "foo", scope: !13, file: !13, line: 7, type: !14, scopeLine: 7, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !17)
!27 = !DILocalVariable(name: "a", scope: !28, file: !13, line: 2, type: !29)
!28 = distinct !DISubprogram(name: "removed", scope: !13, file: !13, line: 2, type: !14, scopeLine: 2, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !17)
!29 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", scope: !28, file: !13, line: 2, size: 32, elements: !30)
!30 = !{!31}
!31 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !29, file: !13, line: 2, baseType: !16, size: 32)
!32 = !DILocation(line: 2, column: 45, scope: !28, inlinedAt: !33)
!33 = distinct !DILocation(line: 7, column: 20, scope: !26)
!34 = !DILocation(line: 2, column: 57, scope: !28, inlinedAt: !33)
!35 = !DILocation(line: 2, column: 58, scope: !28, inlinedAt: !33)
!36 = !DILocation(line: 5, column: 49, scope: !12, inlinedAt: !37)
!37 = distinct !DILocation(line: 7, column: 32, scope: !26)
!38 = !DILocation(line: 5, column: 61, scope: !12, inlinedAt: !37)
!39 = !DILocation(line: 5, column: 62, scope: !12, inlinedAt: !37)
!40 = !DILocation(line: 7, column: 30, scope: !26)
!41 = !DILocation(line: 7, column: 13, scope: !26)
92 changes: 92 additions & 0 deletions llvm/test/DebugInfo/Generic/inlined-static-var.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck --implicit-check-not "{{DW_TAG|NULL}}" %s

; inline __attribute__((always_inline))
; int removed() { static int A; return A++; }
;
; __attribute__((always_inline))
; int not_removed() { static int B; return B++; }
;
; int foo() { return removed() + not_removed(); }

; Ensure that global variables belong to the correct subprograms even if those
; subprograms are inlined.

; CHECK: DW_TAG_compile_unit
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_abstract_origin {{.*}} "_Z11not_removedv"
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("removed")
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name ("A")
; CHECK: NULL
; CHECK: DW_TAG_base_type
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("not_removed")
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name ("B")
; CHECK: NULL
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("foo")
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_TAG_inlined_subroutine
; CHECK: NULL
; CHECK: NULL

@_ZZ11not_removedvE1A = internal global i32 0, align 4, !dbg !0
@_ZZ7removedvE1A = linkonce_odr dso_local global i32 0, align 4, !dbg !10

define dso_local i32 @_Z11not_removedv() !dbg !2 {
%1 = load i32, i32* @_ZZ11not_removedvE1A, align 4, !dbg !24
%2 = add nsw i32 %1, 1, !dbg !24
store i32 %2, i32* @_ZZ11not_removedvE1A, align 4, !dbg !24
ret i32 %1, !dbg !25
}

define dso_local i32 @_Z3foov() !dbg !26 {
%1 = load i32, i32* @_ZZ7removedvE1A, align 4, !dbg !27
%2 = add nsw i32 %1, 1, !dbg !27
store i32 %2, i32* @_ZZ7removedvE1A, align 4, !dbg !27
%3 = load i32, i32* @_ZZ11not_removedvE1A, align 4, !dbg !29
%4 = add nsw i32 %3, 1, !dbg !29
store i32 %4, i32* @_ZZ11not_removedvE1A, align 4, !dbg !29
%5 = add nsw i32 %1, %3, !dbg !31
ret i32 %5, !dbg !32
}

!llvm.dbg.cu = !{!7}
!llvm.module.flags = !{!14, !15, !16, !17, !18, !19, !20, !21, !22}
!llvm.ident = !{!23}

!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "B", scope: !2, file: !3, line: 5, type: !6, isLocal: true, isDefinition: true)
!2 = distinct !DISubprogram(name: "not_removed", linkageName: "_Z11not_removedv", scope: !3, file: !3, line: 5, type: !4, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !7, retainedNodes: !13)
!3 = !DIFile(filename: "example.cpp", directory: "")
!4 = !DISubroutineType(types: !5)
!5 = !{!6}
!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !8, producer: "clang version 14.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !9, splitDebugInlining: false, nameTableKind: None)
!8 = !DIFile(filename: "example.cpp", directory: "")
!9 = !{!0, !10}
!10 = !DIGlobalVariableExpression(var: !11, expr: !DIExpression())
!11 = distinct !DIGlobalVariable(name: "A", scope: !12, file: !3, line: 2, type: !6, isLocal: false, isDefinition: true)
!12 = distinct !DISubprogram(name: "removed", linkageName: "_Z7removedv", scope: !3, file: !3, line: 2, type: !4, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !7, retainedNodes: !13)
!13 = !{}
!14 = !{i32 7, !"Dwarf Version", i32 4}
!15 = !{i32 2, !"Debug Info Version", i32 3}
!16 = !{i32 1, !"wchar_size", i32 4}
!17 = !{i32 1, !"branch-target-enforcement", i32 0}
!18 = !{i32 1, !"sign-return-address", i32 0}
!19 = !{i32 1, !"sign-return-address-all", i32 0}
!20 = !{i32 1, !"sign-return-address-with-bkey", i32 0}
!21 = !{i32 7, !"uwtable", i32 1}
!22 = !{i32 7, !"frame-pointer", i32 1}
!23 = !{!"clang version 14.0.0"}
!24 = !DILocation(line: 5, column: 43, scope: !2)
!25 = !DILocation(line: 5, column: 35, scope: !2)
!26 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !3, file: !3, line: 7, type: !4, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !7, retainedNodes: !13)
!27 = !DILocation(line: 2, column: 39, scope: !12, inlinedAt: !28)
!28 = distinct !DILocation(line: 7, column: 20, scope: !26)
!29 = !DILocation(line: 5, column: 43, scope: !2, inlinedAt: !30)
!30 = distinct !DILocation(line: 7, column: 32, scope: !26)
!31 = !DILocation(line: 7, column: 30, scope: !26)
!32 = !DILocation(line: 7, column: 13, scope: !26)
143 changes: 143 additions & 0 deletions llvm/test/DebugInfo/Generic/lexical_block_static.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck --implicit-check-not "{{DW_TAG|NULL}}" %s

; inline __attribute__((always_inline))
; int removed() {
; {
; static int A;
; return A++;
; }
; }
;
; __attribute__((always_inline))
; int not_removed() {
; {
; static int B;
; return B++;
; }
; }
;
; int foo() {
; {
; static int C;
; return ++C + removed() + not_removed();
; }
; }

; CHECK: DW_TAG_compile_unit

; Out-of-line definition of `not_removed()`.
; The empty lexical block is created to match abstract origin.
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_abstract_origin {{.*}} "_Z11not_removedv"
; CHECK: DW_TAG_lexical_block
; CHECK: NULL

; Abstract definition of `removed()`
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("removed")
; CHECK: DW_AT_inline (DW_INL_inlined)
; CHECK: DW_TAG_lexical_block
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name ("A")
; CHECK: DW_AT_location
; CHECK: NULL
; CHECK: NULL
; CHECK: DW_TAG_base_type

; Abstract definition of `not_removed()`
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("not_removed")
; CHECK: DW_AT_inline (DW_INL_inlined)
; CHECK: DW_TAG_lexical_block
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name ("B")
; CHECK: DW_AT_location
; CHECK: NULL
; CHECK: NULL

; Definition of foo().
; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_name ("foo")
; CHECK: DW_TAG_lexical_block
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_TAG_lexical_block
; CHECK: NULL
; CHECK: DW_TAG_inlined_subroutine
; CHECK: DW_TAG_lexical_block
; CHECK: NULL
; CHECK: DW_TAG_variable
; CHECK: DW_AT_name ("C")
; CHECK: DW_AT_location
; CHECK: NULL
; CHECK: NULL
; CHECK: NULL

$_ZZ7removedvE1A = comdat any

@_ZZ11not_removedvE1B = internal global i32 0, align 4, !dbg !0
@_ZZ3foovE1C = internal global i32 0, align 4, !dbg !10
@_ZZ7removedvE1A = linkonce_odr dso_local global i32 0, comdat, align 4, !dbg !15

define dso_local i32 @_Z11not_removedv() !dbg !4 {
entry:
%0 = load i32, i32* @_ZZ11not_removedvE1B, align 4, !dbg !25
%inc = add nsw i32 %0, 1, !dbg !25
store i32 %inc, i32* @_ZZ11not_removedvE1B, align 4, !dbg !25
ret i32 %0, !dbg !26
}

define dso_local i32 @_Z3foov() !dbg !13 {
entry:
%0 = load i32, i32* @_ZZ3foovE1C, align 4, !dbg !27
%inc = add nsw i32 %0, 1, !dbg !27
store i32 %inc, i32* @_ZZ3foovE1C, align 4, !dbg !27
%1 = load i32, i32* @_ZZ7removedvE1A, align 4, !dbg !28
%inc.i3 = add nsw i32 %1, 1, !dbg !28
store i32 %inc.i3, i32* @_ZZ7removedvE1A, align 4, !dbg !28
%add = add nsw i32 %inc, %1, !dbg !30
%2 = load i32, i32* @_ZZ11not_removedvE1B, align 4, !dbg !31
%inc.i = add nsw i32 %2, 1, !dbg !31
store i32 %inc.i, i32* @_ZZ11not_removedvE1B, align 4, !dbg !31
%add2 = add nsw i32 %add, %2, !dbg !33
ret i32 %add2, !dbg !34
}

!llvm.dbg.cu = !{!8}
!llvm.module.flags = !{!19, !20, !21, !22, !23}
!llvm.ident = !{!24}

!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "B", scope: !2, file: !3, line: 13, type: !7, isLocal: true, isDefinition: true)
!2 = distinct !DILexicalBlock(scope: !4, file: !3, line: 12, column: 3)
!3 = !DIFile(filename: "test_static.cpp", directory: "/")
!4 = distinct !DISubprogram(name: "not_removed", linkageName: "_Z11not_removedv", scope: !3, file: !3, line: 11, type: !5, scopeLine: 11, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !8, retainedNodes: !14)
!5 = !DISubroutineType(types: !6)
!6 = !{!7}
!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!8 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !3, producer: "clang version 14.0.0 (git@github.com:llvm/llvm-project.git e1d09ac2d118825452bfc26e44565f7f4122fd6d)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !9, splitDebugInlining: false, nameTableKind: None)
!9 = !{!0, !10, !15}
!10 = !DIGlobalVariableExpression(var: !11, expr: !DIExpression())
!11 = distinct !DIGlobalVariable(name: "C", scope: !12, file: !3, line: 20, type: !7, isLocal: true, isDefinition: true)
!12 = distinct !DILexicalBlock(scope: !13, file: !3, line: 19, column: 3)
!13 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !3, file: !3, line: 18, type: !5, scopeLine: 18, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !8, retainedNodes: !14)
!14 = !{}
!15 = !DIGlobalVariableExpression(var: !16, expr: !DIExpression())
!16 = distinct !DIGlobalVariable(name: "A", scope: !17, file: !3, line: 5, type: !7, isLocal: false, isDefinition: true)
!17 = distinct !DILexicalBlock(scope: !18, file: !3, line: 4, column: 3)
!18 = distinct !DISubprogram(name: "removed", linkageName: "_Z7removedv", scope: !3, file: !3, line: 3, type: !5, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !8, retainedNodes: !14)
!19 = !{i32 7, !"Dwarf Version", i32 4}
!20 = !{i32 2, !"Debug Info Version", i32 3}
!21 = !{i32 1, !"wchar_size", i32 4}
!22 = !{i32 7, !"uwtable", i32 1}
!23 = !{i32 7, !"frame-pointer", i32 2}
!24 = !{!"clang version 14.0.0 (git@github.com:llvm/llvm-project.git)"}
!25 = !DILocation(line: 14, column: 13, scope: !2)
!26 = !DILocation(line: 14, column: 5, scope: !2)
!27 = !DILocation(line: 21, column: 12, scope: !12)
!28 = !DILocation(line: 6, column: 13, scope: !17, inlinedAt: !29)
!29 = distinct !DILocation(line: 21, column: 18, scope: !12)
!30 = !DILocation(line: 21, column: 16, scope: !12)
!31 = !DILocation(line: 14, column: 13, scope: !2, inlinedAt: !32)
!32 = distinct !DILocation(line: 21, column: 30, scope: !12)
!33 = !DILocation(line: 21, column: 28, scope: !12)
!34 = !DILocation(line: 21, column: 5, scope: !12)
421 changes: 421 additions & 0 deletions llvm/test/DebugInfo/Generic/lexical_block_types.ll

Large diffs are not rendered by default.

51 changes: 25 additions & 26 deletions llvm/test/DebugInfo/Generic/namespace.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@
; CHECK-NOT: DW_AT_decl_file
; CHECK-NOT: DW_AT_decl_line

; CHECK: DW_TAG_subprogram
; CHECK: DW_AT_MIPS_linkage_name
; CHECK: DW_AT_name ("f1")
; CHECK: [[FUNC1:.*]]: DW_TAG_subprogram
; CHECK: DW_AT_MIPS_linkage_name
; CHECK: DW_AT_name ("f1")
; CHECK: DW_TAG_formal_parameter
; CHECK: NULL

; CHECK: [[FUNC_FWD:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
; CHECK: DW_AT_name ("func_fwd")
; CHECK-NOT: DW_AT_declaration

; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
; CHECK: DW_AT_name ("i")
; CHECK: [[VAR_FWD:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
Expand All @@ -24,15 +37,6 @@
; 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")
; CHECK: [[FUNC1:.*]]: DW_TAG_subprogram
; CHECK: DW_AT_MIPS_linkage_name
; CHECK: DW_AT_name ("f1")
; CHECK: DW_TAG_formal_parameter
; CHECK: NULL

; CHECK: [[BAZ:0x[0-9a-f]*]]:{{.*}}DW_TAG_typedef
; CHECK: DW_AT_name ("baz")

Expand All @@ -43,10 +47,6 @@
; CHECK: [[FUNC_DECL:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
; CHECK: DW_AT_name ("func_decl")
; CHECK: DW_AT_declaration

; CHECK: [[FUNC_FWD:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
; CHECK: DW_AT_name ("func_fwd")
; CHECK-NOT: DW_AT_declaration
; CHECK: NULL

; CHECK: DW_TAG_imported_module
Expand All @@ -56,18 +56,17 @@
; 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
; CHECK: DW_AT_name ("func")
; CHECK: DW_TAG_formal_parameter
; CHECK: DW_TAG_lexical_block
; CHECK: DW_TAG_imported_module
; CHECK: DW_AT_decl_file ([[F2]])
; CHECK: DW_AT_decl_line (23)
; CHECK: DW_AT_import {{.*}}
; CHECK: NULL
; CHECK: DW_TAG_imported_module
; CHECK: DW_AT_decl_file ([[F2:.*]])
; CHECK: DW_AT_decl_line (26)
Expand Down Expand Up @@ -118,16 +117,16 @@
; CHECK: DW_AT_decl_file ([[F2]])
; CHECK: DW_AT_decl_line (37)
; CHECK: DW_AT_import ([[FUNC_FWD]])
; CHECK: DW_TAG_lexical_block
; CHECK: DW_TAG_imported_module
; CHECK: DW_AT_decl_file ([[F2]])
; CHECK: DW_AT_decl_line (23)
; CHECK: DW_AT_import {{.*}}
; CHECK: NULL
; CHECK: NULL

; CHECK: DW_TAG_subprogram
; 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_base_type
; CHECK: NULL

; IR generated from clang/test/CodeGenCXX/debug-info-namespace.cpp, file paths
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/DebugInfo/Generic/varargs.ll
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("a")
; CHECK: DW_AT_name ("b")
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name ("b")
; CHECK: DW_AT_name ("a")
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_variable
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
--- |
Expand Down
154 changes: 77 additions & 77 deletions llvm/test/DebugInfo/NVPTX/debug-addr-class.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
12,768 changes: 6,384 additions & 6,384 deletions llvm/test/DebugInfo/NVPTX/debug-info.ll

Large diffs are not rendered by default.

154 changes: 77 additions & 77 deletions llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/PowerPC/strict-dwarf.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
12 changes: 6 additions & 6 deletions llvm/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,17 @@ attributes #1 = { nounwind readnone }

; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB")
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC")
; CHECK-NOT: DW_TAG
; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c")
; 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_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]*}}] = "LOC")
; 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: 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] (4)
; CHECK: DW_AT_decl_line [DW_FORM_data1] (1)

8 changes: 4 additions & 4 deletions llvm/test/DebugInfo/X86/DW_AT_calling-convention.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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"
Expand Down
30 changes: 15 additions & 15 deletions llvm/test/DebugInfo/X86/align_cpp11.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
13 changes: 7 additions & 6 deletions llvm/test/DebugInfo/X86/align_objc.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/DebugInfo/X86/arange-and-stub.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions llvm/test/DebugInfo/X86/containing-type-extension-rust.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
10 changes: 4 additions & 6 deletions llvm/test/DebugInfo/X86/debug-info-access.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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"
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/DebugInfo/X86/debug-info-blocks.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]]}

Expand Down
4 changes: 4 additions & 0 deletions llvm/test/DebugInfo/X86/debug-info-static-member.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
31 changes: 16 additions & 15 deletions llvm/test/DebugInfo/X86/debug-loc-offset.mir
Original file line number Diff line number Diff line change
Expand Up @@ -31,39 +31,40 @@
#
# 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 {{.*}} (0x00000020 ".text")
# 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]{{.*}}"_Z3baz1A"
# 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: [0x00000029, 0x00000037) ".text": DW_OP_breg0 EAX+0, DW_OP_deref
# CHECK-NEXT: [0x00000037, 0x00000063) ".text": DW_OP_breg5 EBP-8, DW_OP_deref, DW_OP_deref
# CHECK-NEXT: DW_AT_name [DW_FORM_strp]{{.*}}"a"
#
# CHECK: DW_TAG_variable
# CHECK: DW_AT_location [DW_FORM_exprloc]
# CHECK-NOT: DW_AT_location
#
# 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 {{.*}} (0x00000000 ".text")
# CHECK: DW_AT_low_pc {{.*}} (0x00000020 ".text")
# CHECK: DW_AT_high_pc
#
# CHECK: DW_TAG_subprogram
# CHECK-NOT: DW_TAG
# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3bari"
# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3baz1A"
# 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-NEXT: [0x00000029, 0x00000037) ".text": DW_OP_breg0 EAX+0, DW_OP_deref
# CHECK-NEXT: [0x00000037, 0x00000063) ".text": DW_OP_breg5 EBP-8, DW_OP_deref, DW_OP_deref
# CHECK-NEXT: DW_AT_name [DW_FORM_strp]{{.*}}"a"
#
# CHECK: DW_TAG_variable
# CHECK: DW_AT_location [DW_FORM_exprloc]
# CHECK-NOT: DW_AT_location
#
# CHECK: .debug_loc contents:
# CHECK: 0x00000000:
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/DebugInfo/X86/dwarf-aranges.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/X86/dwarf-linkage-names.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 7 additions & 7 deletions llvm/test/DebugInfo/X86/dwarfdump-DIImportedEntity_elements.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 10 additions & 8 deletions llvm/test/DebugInfo/X86/generate-odr-hash.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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:
Expand Down
43 changes: 21 additions & 22 deletions llvm/test/DebugInfo/X86/gnu-public-names.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 0 additions & 5 deletions llvm/test/DebugInfo/X86/lexical-block-file-inline.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/DebugInfo/X86/linkage-name.ll
Original file line number Diff line number Diff line change
@@ -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

Expand Down
5 changes: 3 additions & 2 deletions llvm/test/DebugInfo/X86/namelist1.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/X86/sret.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/DebugInfo/X86/subprogram-across-cus.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
33 changes: 16 additions & 17 deletions llvm/test/DebugInfo/X86/template.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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]]}

Expand Down
37 changes: 21 additions & 16 deletions llvm/test/DebugInfo/X86/tls.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
3 changes: 3 additions & 0 deletions llvm/test/DebugInfo/X86/vla-global.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
71 changes: 34 additions & 37 deletions llvm/test/DebugInfo/attr-btf_tag.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")
Expand All @@ -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)
Expand Down
22 changes: 11 additions & 11 deletions llvm/test/MC/WebAssembly/debug-info.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 11 additions & 11 deletions llvm/test/MC/WebAssembly/debug-info64.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
86 changes: 43 additions & 43 deletions llvm/test/MC/WebAssembly/dwarfdump.ll
Original file line number Diff line number Diff line change
Expand Up @@ -15,46 +15,46 @@
; CHECK-NEXT: DW_AT_low_pc (0x00000002)
; CHECK-NEXT: DW_AT_high_pc (0x00000004)

; CHECK: 0x00000026: DW_TAG_variable
; 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)
; CHECK-NEXT: DW_AT_name ("f2")
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line (2)
; 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 (0x00000037 "int *")
; 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: 0x00000037: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x0000003c "int")
; CHECK: 0x0000004e: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x00000053 "int")

; CHECK: 0x0000003c: DW_TAG_base_type
; 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: 0x00000043: DW_TAG_variable
; CHECK: 0x0000005a: DW_TAG_variable
; CHECK-NEXT: DW_AT_name ("ptr2")
; CHECK-NEXT: DW_AT_type (0x00000054 "void (*)()")
; 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: 0x00000054: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x00000059 "void ()")
; CHECK: 0x0000006b: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type (0x00000070 "void ()")

; CHECK: 0x00000059: DW_TAG_subroutine_type
; CHECK: 0x00000070: DW_TAG_subroutine_type
; CHECK-NEXT: DW_AT_prototyped (true)

; CHECK: 0x0000005a: 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)
; CHECK-NEXT: DW_AT_name ("f2")
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
; CHECK-NEXT: DW_AT_decl_line (2)
; CHECK-NEXT: DW_AT_prototyped (true)
; CHECK-NEXT: DW_AT_external (true)

; CHECK: 0x00000071: NULL


Expand All @@ -66,48 +66,48 @@
; 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: 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")
; SPLIT-NEXT: DW_AT_decl_file (0x01)
; SPLIT-NEXT: DW_AT_decl_line (2)
; 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 (0x00000024 "int *")
; 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 0x0)
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x1)

; SPLIT: 0x00000024: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x00000029 "int")
; SPLIT: 0x00000035: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x0000003a "int")

; SPLIT: 0x00000029: DW_TAG_base_type
; 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: 0x0000002d: DW_TAG_variable
; SPLIT: 0x0000003e: DW_TAG_variable
; SPLIT-NEXT: DW_AT_name ("ptr2")
; SPLIT-NEXT: DW_AT_type (0x00000038 "void (*)()")
; 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 0x1)
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x2)

; SPLIT: 0x00000038: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x0000003d "void ()")
; SPLIT: 0x00000049: DW_TAG_pointer_type
; SPLIT-NEXT: DW_AT_type (0x0000004e "void ()")

; SPLIT: 0x0000003d: DW_TAG_subroutine_type
; SPLIT: 0x0000004e: 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-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")
; SPLIT-NEXT: DW_AT_decl_file (0x01)
; SPLIT-NEXT: DW_AT_decl_line (2)
; SPLIT-NEXT: DW_AT_prototyped (true)
; SPLIT-NEXT: DW_AT_external (true)

; SPLIT: 0x0000004f: NULL


Expand Down
40 changes: 20 additions & 20 deletions llvm/test/MC/WebAssembly/dwarfdump64.ll
Original file line number Diff line number Diff line change
Expand Up @@ -14,46 +14,46 @@
; 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: 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)
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("f2")
; 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] (2)
; 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] (0x0000003f "int *")
; 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: 0x0000003f: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000044 "int")
; CHECK: 0x0000005a: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000005f "int")

; CHECK: 0x00000044: DW_TAG_base_type
; 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: 0x0000004b: DW_TAG_variable
; CHECK: 0x00000066: 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_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: 0x00000060: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000065 "void ()")
; CHECK: 0x0000007b: DW_TAG_pointer_type
; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000080 "void ()")

; CHECK: 0x00000065: DW_TAG_subroutine_type
; CHECK: 0x00000080: DW_TAG_subroutine_type
; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true)

; CHECK: 0x00000066: 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)
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("f2")
; 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] (2)
; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true)
; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true)

; CHECK: 0x00000081: NULL

target triple = "wasm64-unknown-unknown"
Expand Down