Minor CFG refinements for typeid and dynamic_cast.

llvm-svn: 89004
This commit is contained in:
Mike Stump 2009-11-17 00:08:50 +00:00
parent 4781c3caf8
commit e8cdcc9ab0
1 changed files with 1 additions and 4 deletions

View File

@ -389,7 +389,6 @@ llvm::Value * CodeGenFunction::EmitCXXTypeidExpr(const CXXTypeidExpr *E) {
FTy = llvm::FunctionType::get(ResultType, false); FTy = llvm::FunctionType::get(ResultType, false);
llvm::Value *F = CGM.CreateRuntimeFunction(FTy, "__cxa_bad_typeid"); llvm::Value *F = CGM.CreateRuntimeFunction(FTy, "__cxa_bad_typeid");
Builder.CreateCall(F)->setDoesNotReturn(); Builder.CreateCall(F)->setDoesNotReturn();
// FIXME: Should we have the below?
Builder.CreateUnreachable(); Builder.CreateUnreachable();
EmitBlock(NonZeroBlock); EmitBlock(NonZeroBlock);
} }
@ -501,7 +500,7 @@ llvm::Value *CodeGenFunction::EmitDynamicCast(llvm::Value *V,
FTy = llvm::FunctionType::get(ResultType, false); FTy = llvm::FunctionType::get(ResultType, false);
llvm::Value *F = CGM.CreateRuntimeFunction(FBadTy, "__cxa_bad_cast"); llvm::Value *F = CGM.CreateRuntimeFunction(FBadTy, "__cxa_bad_cast");
Builder.CreateCall(F)->setDoesNotReturn(); Builder.CreateCall(F)->setDoesNotReturn();
// Builder.CreateUnreachable(); Builder.CreateUnreachable();
} }
} }
@ -516,8 +515,6 @@ llvm::Value *CodeGenFunction::EmitDynamicCast(llvm::Value *V,
PHI->reserveOperandSpace(3); PHI->reserveOperandSpace(3);
PHI->addIncoming(V, NonZeroBlock); PHI->addIncoming(V, NonZeroBlock);
PHI->addIncoming(llvm::Constant::getNullValue(LTy), NullBlock); PHI->addIncoming(llvm::Constant::getNullValue(LTy), NullBlock);
if (ThrowOnBad)
PHI->addIncoming(llvm::Constant::getNullValue(LTy), BadCastBlock);
V = PHI; V = PHI;
} }