Before inserting llvm.dbg.declare intrinsic at the end of a basic block, check whether the basic block has a terminator or not.

This API is used by clang and the test case is test/CodeGen/debug-info-crash.c in clang module.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94820 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2010-01-29 18:30:57 +00:00
parent 4f17eb8721
commit 27a53de9b8

View File

@ -1055,8 +1055,13 @@ Instruction *DIFactory::InsertDeclare(Value *Storage, DIVariable D,
Value *Args[] = { MDNode::get(Storage->getContext(), &Storage, 1), Value *Args[] = { MDNode::get(Storage->getContext(), &Storage, 1),
D.getNode() }; D.getNode() };
return CallInst::Create(DeclareFn, Args, Args+2, "", InsertAtEnd);
} // If this block already has a terminator then insert this intrinsic
// before the terminator.
if (TerminatorInst *T = InsertAtEnd->getTerminator())
return CallInst::Create(DeclareFn, Args, Args+2, "", T);
else
return CallInst::Create(DeclareFn, Args, Args+2, "", InsertAtEnd);}
/// InsertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. /// InsertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
Instruction *DIFactory::InsertDbgValueIntrinsic(Value *V, uint64_t Offset, Instruction *DIFactory::InsertDbgValueIntrinsic(Value *V, uint64_t Offset,