[llvm] 8ae5e0b - Add missing nullptr check
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 17 14:00:03 PDT 2021
Author: Adrian Prantl
Date: 2021-08-17T13:59:52-07:00
New Revision: 8ae5e0b154ae18a78f73c0aef58356002b8ff0d7
URL: https://github.com/llvm/llvm-project/commit/8ae5e0b154ae18a78f73c0aef58356002b8ff0d7
DIFF: https://github.com/llvm/llvm-project/commit/8ae5e0b154ae18a78f73c0aef58356002b8ff0d7.diff
LOG: Add missing nullptr check
Unfortunatley the IR Verifier doesn't reject debug intrinsics that
have nullptr as arguments, so coro::salvageDebugInfo for now also
needs to deal with them.
rdar://81979541
Added:
Modified:
llvm/lib/Transforms/Coroutines/CoroFrame.cpp
llvm/test/Transforms/Coroutines/coro-debug.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
index e4ef23c0094b..e213de2b73f4 100644
--- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
@@ -2514,7 +2514,7 @@ void coro::salvageDebugInfo(
bool OutermostLoad = true;
Value *Storage = DVI->getVariableLocationOp(0);
Value *OriginalStorage = Storage;
- while (auto *Inst = dyn_cast<Instruction>(Storage)) {
+ while (auto *Inst = dyn_cast_or_null<Instruction>(Storage)) {
if (auto *LdInst = dyn_cast<LoadInst>(Inst)) {
Storage = LdInst->getOperand(0);
// FIXME: This is a heuristic that works around the fact that
@@ -2543,6 +2543,8 @@ void coro::salvageDebugInfo(
Expr = DIExpression::appendOpsToArg(Expr, Ops, 0, /*StackValue*/ false);
}
}
+ if (!Storage)
+ return;
// Store a pointer to the coroutine frame object in an alloca so it
// is available throughout the function when producing unoptimized
diff --git a/llvm/test/Transforms/Coroutines/coro-debug.ll b/llvm/test/Transforms/Coroutines/coro-debug.ll
index 1e86b656d62e..ec5924fc3ea9 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug.ll
@@ -34,8 +34,10 @@ sw.bb: ; preds = %entry
call void @llvm.dbg.declare(metadata i32 %direct, metadata !25, metadata !13), !dbg !14
call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !12, metadata !13), !dbg !14
call void @llvm.dbg.declare(metadata i8** %coro_hdl, metadata !15, metadata !13), !dbg !16
- call void @llvm.dbg.declare(metadata i8* null, metadata !28, metadata !13), !dbg !16
call void @llvm.dbg.declare(metadata i32* %late_local, metadata !29, metadata !13), !dbg !16
+ ; don't crash when encountering nonsensical debug info, verfifier doesn't yet reject these
+ call void @llvm.dbg.declare(metadata i8* null, metadata !28, metadata !13), !dbg !16
+ call void @llvm.dbg.declare(metadata !{}, metadata !28, metadata !13), !dbg !16
br label %next, !dbg !18
next:
More information about the llvm-commits
mailing list