From 2d605ac1f511b433408362df5d7dba19d5eac6f1 Mon Sep 17 00:00:00 2001 From: John McCall Date: Tue, 6 Jul 2010 17:35:03 +0000 Subject: When destroying a cleanup, kill any references to instructions in the entry block before deleting it. Fixes PR7575. This really just a short-term fix before implementing lazy cleanups. llvm-svn: 107676 --- clang/lib/CodeGen/CodeGenFunction.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp') diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 306989f11e2..9375b77360c 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -688,6 +688,12 @@ static void DestroyCleanup(CodeGenFunction &CGF, llvm::BranchInst::Create(CGF.getUnreachableBlock(), Exit); assert(!Entry->getParent() && "cleanup entry already positioned?"); + // We can't just delete the entry; we have to kill any references to + // its instructions in other blocks. + for (llvm::BasicBlock::iterator I = Entry->begin(), E = Entry->end(); + I != E; ++I) + if (!I->use_empty()) + I->replaceAllUsesWith(llvm::UndefValue::get(I->getType())); delete Entry; } -- cgit v1.2.3