mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-01 15:40:55 +03:00
MSVC: Attach !dbg info to _d_eh_enter_catch, _d_enter_cleanup and _d_leave_cleanup calls.
This commit is contained in:
parent
7ac1216292
commit
302d71a9de
4 changed files with 26 additions and 6 deletions
|
@ -283,21 +283,30 @@ llvm::BasicBlock *ScopeStack::runCleanupPad(CleanupCursor scope,
|
|||
// can place an exception frame (but not done here)
|
||||
auto frame = getNullPtr(getVoidPtrType());
|
||||
|
||||
auto savedInsertBlock = irs->ir->GetInsertBlock();
|
||||
auto savedInsertPoint = irs->ir->GetInsertPoint();
|
||||
auto savedDbgLoc = irs->DBuilder.GetCurrentLoc();
|
||||
|
||||
auto endFn = getRuntimeFunction(Loc(), irs->module, "_d_leave_cleanup");
|
||||
llvm::CallInst::Create(endFn, frame,
|
||||
{llvm::OperandBundleDef("funclet", cleanuppad)}, "",
|
||||
cleanupret);
|
||||
irs->ir->SetInsertPoint(cleanupret);
|
||||
irs->DBuilder.EmitStopPoint(irs->func()->decl->loc);
|
||||
irs->ir->CreateCall(endFn, frame,
|
||||
{llvm::OperandBundleDef("funclet", cleanuppad)}, "");
|
||||
llvm::CleanupReturnInst::Create(cleanuppad, unwindTo, cleanupret);
|
||||
|
||||
auto copybb = executeCleanupCopying(irs, cleanupScopes[scope], cleanupbb,
|
||||
cleanupret, unwindTo, cleanuppad);
|
||||
|
||||
auto beginFn = getRuntimeFunction(Loc(), irs->module, "_d_enter_cleanup");
|
||||
auto exec = llvm::CallInst::Create(
|
||||
beginFn, frame, {llvm::OperandBundleDef("funclet", cleanuppad)}, "",
|
||||
cleanupbb);
|
||||
irs->ir->SetInsertPoint(cleanupbb);
|
||||
irs->DBuilder.EmitStopPoint(irs->func()->decl->loc);
|
||||
auto exec = irs->ir->CreateCall(
|
||||
beginFn, frame, {llvm::OperandBundleDef("funclet", cleanuppad)}, "");
|
||||
llvm::BranchInst::Create(copybb, cleanupret, exec, cleanupbb);
|
||||
|
||||
irs->ir->SetInsertPoint(savedInsertBlock, savedInsertPoint);
|
||||
irs->DBuilder.EmitStopPoint(savedDbgLoc);
|
||||
|
||||
return cleanupbb;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue