Skip to content

Commit 3d7aa96

Browse files
authored
[DebugInfo][RemoveDIs] Use autoupgrader to convert old debug-info (#143452)
By chance, two things have prevented the autoupgrade path being exercised much so far: * LLParser setting the debug-info mode to "old" on seeing intrinsics, * The test in AutoUpgrade.cpp wanting to upgrade into a "new" debug-info block. In practice, this appears to mean this code path hasn't seen the various invalid inputs that can come its way. This commit does a number of things: * Tolerates the various illegal inputs that can be written with debug-intrinsics, and that must be tolerated until the Verifier runs, * Printing illegal/null DbgRecord fields must succeed, * Verifier errors need to localise the function/block where the error is, * Tests that now see debug records will print debug-record errors, Plus a few new tests for other intrinsic-to-debug-record failures modes I found. There are also two edge cases: * Some of the unit tests switch back and forth between intrinsic and record modes at will; I've deleted coverage and some assertions to tolerate this as intrinsic support is now Gone (TM), * In sroa-extract-bits.ll, the order of debug records flips. This is because the autoupgrader upgrades in the opposite order to the basic block conversion routines... which doesn't change the record order, but _does_ change the use list order in Metadata! This should (TM) have no consequence to the correctness of LLVM, but will change the order of various records and the order of DWARF record output too. I tried to reduce this patch to a smaller collection of changes, but they're all intertwined, sorry.
1 parent 2692c3a commit 3d7aa96

21 files changed

+249
-127
lines changed

llvm/lib/AsmParser/LLParser.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8336,8 +8336,6 @@ bool LLParser::parseCall(Instruction *&Inst, PerFunctionState &PFS,
83368336
return error(CallLoc, "llvm.dbg intrinsic should not appear in a module "
83378337
"using non-intrinsic debug info");
83388338
}
8339-
if (!SeenOldDbgInfoFormat)
8340-
M->setNewDbgInfoFormatFlag(false);
83418339
SeenOldDbgInfoFormat = true;
83428340
}
83438341
CI->setAttributes(PAL);

llvm/lib/IR/AsmWriter.cpp

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,25 +1204,32 @@ void SlotTracker::processFunctionMetadata(const Function &F) {
12041204
}
12051205

12061206
void SlotTracker::processDbgRecordMetadata(const DbgRecord &DR) {
1207+
// Tolerate null metadata pointers: it's a completely illegal debug record,
1208+
// but we can have faulty metadata from debug-intrinsic days being
1209+
// autoupgraded into debug records. This gets caught by the verifier, which
1210+
// then will print the faulty IR, hitting this code path.
12071211
if (const DbgVariableRecord *DVR = dyn_cast<const DbgVariableRecord>(&DR)) {
12081212
// Process metadata used by DbgRecords; we only specifically care about the
12091213
// DILocalVariable, DILocation, and DIAssignID fields, as the Value and
12101214
// Expression fields should only be printed inline and so do not use a slot.
12111215
// Note: The above doesn't apply for empty-metadata operands.
1212-
if (auto *Empty = dyn_cast<MDNode>(DVR->getRawLocation()))
1216+
if (auto *Empty = dyn_cast_if_present<MDNode>(DVR->getRawLocation()))
12131217
CreateMetadataSlot(Empty);
1214-
CreateMetadataSlot(DVR->getRawVariable());
1218+
if (DVR->getRawVariable())
1219+
CreateMetadataSlot(DVR->getRawVariable());
12151220
if (DVR->isDbgAssign()) {
1216-
CreateMetadataSlot(cast<MDNode>(DVR->getRawAssignID()));
1217-
if (auto *Empty = dyn_cast<MDNode>(DVR->getRawAddress()))
1221+
if (auto *AssignID = DVR->getRawAssignID())
1222+
CreateMetadataSlot(cast<MDNode>(AssignID));
1223+
if (auto *Empty = dyn_cast_if_present<MDNode>(DVR->getRawAddress()))
12181224
CreateMetadataSlot(Empty);
12191225
}
12201226
} else if (const DbgLabelRecord *DLR = dyn_cast<const DbgLabelRecord>(&DR)) {
12211227
CreateMetadataSlot(DLR->getRawLabel());
12221228
} else {
12231229
llvm_unreachable("unsupported DbgRecord kind");
12241230
}
1225-
CreateMetadataSlot(DR.getDebugLoc().getAsMDNode());
1231+
if (DR.getDebugLoc())
1232+
CreateMetadataSlot(DR.getDebugLoc().getAsMDNode());
12261233
}
12271234

12281235
void SlotTracker::processInstructionMetadata(const Instruction &I) {
@@ -4867,22 +4874,30 @@ void AssemblyWriter::printDbgVariableRecord(const DbgVariableRecord &DVR) {
48674874
llvm_unreachable(
48684875
"Tried to print a DbgVariableRecord with an invalid LocationType!");
48694876
}
4877+
4878+
auto PrintOrNull = [&](Metadata *M) {
4879+
if (!M)
4880+
Out << "(null)";
4881+
else
4882+
WriteAsOperandInternal(Out, M, WriterCtx, true);
4883+
};
4884+
48704885
Out << "(";
4871-
WriteAsOperandInternal(Out, DVR.getRawLocation(), WriterCtx, true);
4886+
PrintOrNull(DVR.getRawLocation());
48724887
Out << ", ";
4873-
WriteAsOperandInternal(Out, DVR.getRawVariable(), WriterCtx, true);
4888+
PrintOrNull(DVR.getRawVariable());
48744889
Out << ", ";
4875-
WriteAsOperandInternal(Out, DVR.getRawExpression(), WriterCtx, true);
4890+
PrintOrNull(DVR.getRawExpression());
48764891
Out << ", ";
48774892
if (DVR.isDbgAssign()) {
4878-
WriteAsOperandInternal(Out, DVR.getRawAssignID(), WriterCtx, true);
4893+
PrintOrNull(DVR.getRawAssignID());
48794894
Out << ", ";
4880-
WriteAsOperandInternal(Out, DVR.getRawAddress(), WriterCtx, true);
4895+
PrintOrNull(DVR.getRawAddress());
48814896
Out << ", ";
4882-
WriteAsOperandInternal(Out, DVR.getRawAddressExpression(), WriterCtx, true);
4897+
PrintOrNull(DVR.getRawAddressExpression());
48834898
Out << ", ";
48844899
}
4885-
WriteAsOperandInternal(Out, DVR.getDebugLoc().getAsMDNode(), WriterCtx, true);
4900+
PrintOrNull(DVR.getDebugLoc().getAsMDNode());
48864901
Out << ")";
48874902
}
48884903

llvm/lib/IR/AutoUpgrade.cpp

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,8 +1155,7 @@ static bool upgradeIntrinsicFunction1(Function *F, Function *&NewFn,
11551155
case 'd':
11561156
if (Name.consume_front("dbg.")) {
11571157
// Mark debug intrinsics for upgrade to new debug format.
1158-
if (CanUpgradeDebugIntrinsicsToRecords &&
1159-
F->getParent()->IsNewDbgInfoFormat) {
1158+
if (CanUpgradeDebugIntrinsicsToRecords) {
11601159
if (Name == "addr" || Name == "value" || Name == "assign" ||
11611160
Name == "declare" || Name == "label") {
11621161
// There's no function to replace these with.
@@ -4395,39 +4394,66 @@ static Value *upgradeAMDGCNIntrinsicCall(StringRef Name, CallBase *CI,
43954394
return Builder.CreateBitCast(RMW, RetTy);
43964395
}
43974396

4398-
/// Helper to unwrap intrinsic call MetadataAsValue operands.
4399-
template <typename MDType>
4400-
static MDType *unwrapMAVOp(CallBase *CI, unsigned Op) {
4401-
if (MetadataAsValue *MAV = dyn_cast<MetadataAsValue>(CI->getArgOperand(Op)))
4402-
return dyn_cast<MDType>(MAV->getMetadata());
4397+
/// Helper to unwrap intrinsic call MetadataAsValue operands. Return as a
4398+
/// plain MDNode, as it's the verifier's job to check these are the correct
4399+
/// types later.
4400+
static MDNode *unwrapMAVOp(CallBase *CI, unsigned Op) {
4401+
if (Op < CI->arg_size()) {
4402+
if (MetadataAsValue *MAV =
4403+
dyn_cast<MetadataAsValue>(CI->getArgOperand(Op))) {
4404+
Metadata *MD = MAV->getMetadata();
4405+
return dyn_cast_if_present<MDNode>(MD);
4406+
}
4407+
}
4408+
return nullptr;
4409+
}
4410+
4411+
/// Helper to unwrap Metadata MetadataAsValue operands, such as the Value field.
4412+
static Metadata *unwrapMAVMetadataOp(CallBase *CI, unsigned Op) {
4413+
if (Op < CI->arg_size())
4414+
if (MetadataAsValue *MAV = dyn_cast<MetadataAsValue>(CI->getArgOperand(Op)))
4415+
return MAV->getMetadata();
44034416
return nullptr;
44044417
}
44054418

4419+
static MDNode *getDebugLocSafe(const Instruction *I) {
4420+
// The MDNode attached to this instruction might not be the correct type,
4421+
// as the verifier has not yet be run. Fetch it as a bare MDNode.
4422+
return I->getDebugLoc().getAsMDNode();
4423+
}
4424+
44064425
/// Convert debug intrinsic calls to non-instruction debug records.
44074426
/// \p Name - Final part of the intrinsic name, e.g. 'value' in llvm.dbg.value.
44084427
/// \p CI - The debug intrinsic call.
44094428
static void upgradeDbgIntrinsicToDbgRecord(StringRef Name, CallBase *CI) {
44104429
DbgRecord *DR = nullptr;
44114430
if (Name == "label") {
4412-
DR = new DbgLabelRecord(unwrapMAVOp<DILabel>(CI, 0), CI->getDebugLoc());
4431+
DR = DbgLabelRecord::createUnresolvedDbgLabelRecord(unwrapMAVOp(CI, 0),
4432+
CI->getDebugLoc());
44134433
} else if (Name == "assign") {
4414-
DR = new DbgVariableRecord(
4415-
unwrapMAVOp<Metadata>(CI, 0), unwrapMAVOp<DILocalVariable>(CI, 1),
4416-
unwrapMAVOp<DIExpression>(CI, 2), unwrapMAVOp<DIAssignID>(CI, 3),
4417-
unwrapMAVOp<Metadata>(CI, 4), unwrapMAVOp<DIExpression>(CI, 5),
4418-
CI->getDebugLoc());
4434+
DR = DbgVariableRecord::createUnresolvedDbgVariableRecord(
4435+
DbgVariableRecord::LocationType::Assign, unwrapMAVMetadataOp(CI, 0),
4436+
unwrapMAVOp(CI, 1), unwrapMAVOp(CI, 2), unwrapMAVOp(CI, 3),
4437+
unwrapMAVMetadataOp(CI, 4),
4438+
/*The address is a Value ref, it will be stored as a Metadata */
4439+
unwrapMAVOp(CI, 5), getDebugLocSafe(CI));
44194440
} else if (Name == "declare") {
4420-
DR = new DbgVariableRecord(
4421-
unwrapMAVOp<Metadata>(CI, 0), unwrapMAVOp<DILocalVariable>(CI, 1),
4422-
unwrapMAVOp<DIExpression>(CI, 2), CI->getDebugLoc(),
4423-
DbgVariableRecord::LocationType::Declare);
4441+
DR = DbgVariableRecord::createUnresolvedDbgVariableRecord(
4442+
DbgVariableRecord::LocationType::Declare, unwrapMAVMetadataOp(CI, 0),
4443+
unwrapMAVOp(CI, 1), unwrapMAVOp(CI, 2), nullptr, nullptr, nullptr,
4444+
getDebugLocSafe(CI));
44244445
} else if (Name == "addr") {
44254446
// Upgrade dbg.addr to dbg.value with DW_OP_deref.
4426-
DIExpression *Expr = unwrapMAVOp<DIExpression>(CI, 2);
4427-
Expr = DIExpression::append(Expr, dwarf::DW_OP_deref);
4428-
DR = new DbgVariableRecord(unwrapMAVOp<Metadata>(CI, 0),
4429-
unwrapMAVOp<DILocalVariable>(CI, 1), Expr,
4430-
CI->getDebugLoc());
4447+
MDNode *ExprNode = unwrapMAVOp(CI, 2);
4448+
// Don't try to add something to the expression if it's not an expression.
4449+
// Instead, allow the verifier to fail later.
4450+
if (DIExpression *Expr = dyn_cast<DIExpression>(ExprNode)) {
4451+
ExprNode = DIExpression::append(Expr, dwarf::DW_OP_deref);
4452+
}
4453+
DR = DbgVariableRecord::createUnresolvedDbgVariableRecord(
4454+
DbgVariableRecord::LocationType::Value, unwrapMAVMetadataOp(CI, 0),
4455+
unwrapMAVOp(CI, 1), ExprNode, nullptr, nullptr, nullptr,
4456+
getDebugLocSafe(CI));
44314457
} else if (Name == "value") {
44324458
// An old version of dbg.value had an extra offset argument.
44334459
unsigned VarOp = 1;
@@ -4440,9 +4466,10 @@ static void upgradeDbgIntrinsicToDbgRecord(StringRef Name, CallBase *CI) {
44404466
VarOp = 2;
44414467
ExprOp = 3;
44424468
}
4443-
DR = new DbgVariableRecord(
4444-
unwrapMAVOp<Metadata>(CI, 0), unwrapMAVOp<DILocalVariable>(CI, VarOp),
4445-
unwrapMAVOp<DIExpression>(CI, ExprOp), CI->getDebugLoc());
4469+
DR = DbgVariableRecord::createUnresolvedDbgVariableRecord(
4470+
DbgVariableRecord::LocationType::Value, unwrapMAVMetadataOp(CI, 0),
4471+
unwrapMAVOp(CI, VarOp), unwrapMAVOp(CI, ExprOp), nullptr, nullptr,
4472+
nullptr, getDebugLocSafe(CI));
44464473
}
44474474
assert(DR && "Unhandled intrinsic kind in upgrade to DbgRecord");
44484475
CI->getParent()->insertDbgRecordBefore(DR, CI->getIterator());

llvm/lib/IR/BasicBlock.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ using namespace llvm;
3232
STATISTIC(NumInstrRenumberings, "Number of renumberings across all blocks");
3333

3434
DbgMarker *BasicBlock::createMarker(Instruction *I) {
35-
assert(IsNewDbgInfoFormat &&
36-
"Tried to create a marker in a non new debug-info block!");
3735
if (I->DebugMarker)
3836
return I->DebugMarker;
3937
DbgMarker *Marker = new DbgMarker();
@@ -43,8 +41,6 @@ DbgMarker *BasicBlock::createMarker(Instruction *I) {
4341
}
4442

4543
DbgMarker *BasicBlock::createMarker(InstListType::iterator It) {
46-
assert(IsNewDbgInfoFormat &&
47-
"Tried to create a marker in a non new debug-info block!");
4844
if (It != end())
4945
return createMarker(&*It);
5046
DbgMarker *DM = getTrailingDbgRecords();

llvm/lib/IR/Verifier.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6714,38 +6714,41 @@ void Verifier::visit(DbgVariableRecord &DVR) {
67146714
CheckDI(DVR.getType() == DbgVariableRecord::LocationType::Value ||
67156715
DVR.getType() == DbgVariableRecord::LocationType::Declare ||
67166716
DVR.getType() == DbgVariableRecord::LocationType::Assign,
6717-
"invalid #dbg record type", &DVR, DVR.getType());
6717+
"invalid #dbg record type", &DVR, DVR.getType(), BB, F);
67186718

67196719
// The location for a DbgVariableRecord must be either a ValueAsMetadata,
67206720
// DIArgList, or an empty MDNode (which is a legacy representation for an
67216721
// "undef" location).
67226722
auto *MD = DVR.getRawLocation();
67236723
CheckDI(MD && (isa<ValueAsMetadata>(MD) || isa<DIArgList>(MD) ||
67246724
(isa<MDNode>(MD) && !cast<MDNode>(MD)->getNumOperands())),
6725-
"invalid #dbg record address/value", &DVR, MD);
6725+
"invalid #dbg record address/value", &DVR, MD, BB, F);
67266726
if (auto *VAM = dyn_cast<ValueAsMetadata>(MD)) {
67276727
visitValueAsMetadata(*VAM, F);
67286728
if (DVR.isDbgDeclare()) {
67296729
// Allow integers here to support inttoptr salvage.
67306730
Type *Ty = VAM->getValue()->getType();
67316731
CheckDI(Ty->isPointerTy() || Ty->isIntegerTy(),
6732-
"location of #dbg_declare must be a pointer or int", &DVR, MD);
6732+
"location of #dbg_declare must be a pointer or int", &DVR, MD, BB,
6733+
F);
67336734
}
67346735
} else if (auto *AL = dyn_cast<DIArgList>(MD)) {
67356736
visitDIArgList(*AL, F);
67366737
}
67376738

67386739
CheckDI(isa_and_nonnull<DILocalVariable>(DVR.getRawVariable()),
6739-
"invalid #dbg record variable", &DVR, DVR.getRawVariable());
6740+
"invalid #dbg record variable", &DVR, DVR.getRawVariable(), BB, F);
67406741
visitMDNode(*DVR.getRawVariable(), AreDebugLocsAllowed::No);
67416742

67426743
CheckDI(isa_and_nonnull<DIExpression>(DVR.getRawExpression()),
6743-
"invalid #dbg record expression", &DVR, DVR.getRawExpression());
6744+
"invalid #dbg record expression", &DVR, DVR.getRawExpression(), BB,
6745+
F);
67446746
visitMDNode(*DVR.getExpression(), AreDebugLocsAllowed::No);
67456747

67466748
if (DVR.isDbgAssign()) {
67476749
CheckDI(isa_and_nonnull<DIAssignID>(DVR.getRawAssignID()),
6748-
"invalid #dbg_assign DIAssignID", &DVR, DVR.getRawAssignID());
6750+
"invalid #dbg_assign DIAssignID", &DVR, DVR.getRawAssignID(), BB,
6751+
F);
67496752
visitMDNode(*cast<DIAssignID>(DVR.getRawAssignID()),
67506753
AreDebugLocsAllowed::No);
67516754

@@ -6756,29 +6759,29 @@ void Verifier::visit(DbgVariableRecord &DVR) {
67566759
CheckDI(
67576760
isa<ValueAsMetadata>(RawAddr) ||
67586761
(isa<MDNode>(RawAddr) && !cast<MDNode>(RawAddr)->getNumOperands()),
6759-
"invalid #dbg_assign address", &DVR, DVR.getRawAddress());
6762+
"invalid #dbg_assign address", &DVR, DVR.getRawAddress(), BB, F);
67606763
if (auto *VAM = dyn_cast<ValueAsMetadata>(RawAddr))
67616764
visitValueAsMetadata(*VAM, F);
67626765

67636766
CheckDI(isa_and_nonnull<DIExpression>(DVR.getRawAddressExpression()),
67646767
"invalid #dbg_assign address expression", &DVR,
6765-
DVR.getRawAddressExpression());
6768+
DVR.getRawAddressExpression(), BB, F);
67666769
visitMDNode(*DVR.getAddressExpression(), AreDebugLocsAllowed::No);
67676770

67686771
// All of the linked instructions should be in the same function as DVR.
67696772
for (Instruction *I : at::getAssignmentInsts(&DVR))
67706773
CheckDI(DVR.getFunction() == I->getFunction(),
6771-
"inst not in same function as #dbg_assign", I, &DVR);
6774+
"inst not in same function as #dbg_assign", I, &DVR, BB, F);
67726775
}
67736776

67746777
// This check is redundant with one in visitLocalVariable().
67756778
DILocalVariable *Var = DVR.getVariable();
6776-
CheckDI(isType(Var->getRawType()), "invalid type ref", Var,
6777-
Var->getRawType());
6779+
CheckDI(isType(Var->getRawType()), "invalid type ref", Var, Var->getRawType(),
6780+
BB, F);
67786781

67796782
auto *DLNode = DVR.getDebugLoc().getAsMDNode();
67806783
CheckDI(isa_and_nonnull<DILocation>(DLNode), "invalid #dbg record DILocation",
6781-
&DVR, DLNode);
6784+
&DVR, DLNode, BB, F);
67826785
DILocation *Loc = DVR.getDebugLoc();
67836786

67846787
// The scopes for variables and !dbg attachments must agree.
@@ -6790,7 +6793,7 @@ void Verifier::visit(DbgVariableRecord &DVR) {
67906793
CheckDI(VarSP == LocSP,
67916794
"mismatched subprogram between #dbg record variable and DILocation",
67926795
&DVR, BB, F, Var, Var->getScope()->getSubprogram(), Loc,
6793-
Loc->getScope()->getSubprogram());
6796+
Loc->getScope()->getSubprogram(), BB, F);
67946797

67956798
verifyFnArgs(DVR);
67966799
}

llvm/test/Assembler/drop-debug-info-nonzero-alloca.ll

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@ entry:
1212
metadata ptr undef,
1313
metadata !DILocalVariable(scope: !1),
1414
metadata !DIExpression())
15-
; AS: llvm.dbg.value intrinsic requires a !dbg attachment
15+
; AS: invalid #dbg record DILocation
16+
; AS: #dbg_value(ptr undef, !{{[0-9]+}}, !DIExpression(), (null))
17+
; AS: label %entry
18+
; AS: ptr @foo
1619
; AS: warning: ignoring invalid debug info in <stdin>
20+
1721
ret void
1822
}
1923

llvm/test/DebugInfo/Generic/assignment-tracking/parse-and-verify/verify.ll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
define dso_local void @fun2() !dbg !15 {
1010
;; DIAssignID copied here from @fun() where it is used by intrinsics.
11-
; CHECK: dbg.assign not in same function as inst
11+
; CHECK: DVRAssign not in same function as inst
1212
%x = alloca i32, align 4, !DIAssignID !14
1313
ret void
1414
}
@@ -17,24 +17,24 @@ define dso_local void @fun() !dbg !7 {
1717
entry:
1818
%a = alloca i32, align 4, !DIAssignID !14
1919
;; Here something other than a dbg.assign intrinsic is using a DIAssignID.
20-
; CHECK: !DIAssignID should only be used by llvm.dbg.assign intrinsics
20+
; CHECK: !DIAssignID should only be used by Assign DVRs
2121
call void @llvm.dbg.value(metadata !14, metadata !10, metadata !DIExpression()), !dbg !13
2222

2323
;; Each following dbg.assign has an argument of the incorrect type.
24-
; CHECK: invalid llvm.dbg.assign intrinsic address/value
24+
; CHECK: invalid #dbg record address/value
2525
call void @llvm.dbg.assign(metadata !3, metadata !10, metadata !DIExpression(), metadata !14, metadata ptr undef, metadata !DIExpression()), !dbg !13
26-
; CHECK: invalid llvm.dbg.assign intrinsic variable
26+
; CHECK: invalid #dbg record variable
2727
call void @llvm.dbg.assign(metadata i32 0, metadata !2, metadata !DIExpression(), metadata !14, metadata ptr undef, metadata !DIExpression()), !dbg !13
28-
; CHECK: invalid llvm.dbg.assign intrinsic expression
28+
; CHECK: invalid #dbg record expression
2929
call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !2, metadata !14, metadata ptr undef, metadata !DIExpression()), !dbg !13
30-
; CHECK: invalid llvm.dbg.assign intrinsic DIAssignID
30+
; CHECK: invalid #dbg_assign DIAssignID
3131
call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !2, metadata ptr undef, metadata !DIExpression()), !dbg !13
32-
; CHECK: invalid llvm.dbg.assign intrinsic address
32+
; CHECK: invalid #dbg_assign address
3333
call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !14, metadata !3, metadata !DIExpression()), !dbg !13
3434
;; Empty metadata debug operands are allowed.
35-
; CHECK-NOT: invalid llvm.dbg.assign
35+
; CHECK-NOT: invalid #dbg record
3636
call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !14, metadata !2, metadata !DIExpression()), !dbg !13
37-
; CHECK: invalid llvm.dbg.assign intrinsic address expression
37+
; CHECK: invalid #dbg_assign address expression
3838
call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !14, metadata ptr undef, metadata !2), !dbg !13
3939
ret void
4040
}

0 commit comments

Comments
 (0)