diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-03-20 17:03:35 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-03-20 17:03:35 +0000 |
commit | c403a1ce323b9a20fcfd928152da8c59321d2a75 (patch) | |
tree | 57332ad6ee414109310c07c215cd20d7528b10db /clang/lib/CodeGen | |
parent | be30a6524f398151192c0d3211ffec76ab4cf67b (diff) | |
download | bcm5719-llvm-c403a1ce323b9a20fcfd928152da8c59321d2a75.tar.gz bcm5719-llvm-c403a1ce323b9a20fcfd928152da8c59321d2a75.zip |
MS ABI: Accept calls to an unprototyped declaration of _setjmp
This fixes PR22961.
llvm-svn: 232824
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index fc9e4dd1f21..f5ce8fba8c6 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -1699,8 +1699,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, llvm::Constant *SetJmpEx = CGM.CreateRuntimeFunction( llvm::FunctionType::get(IntTy, ArgTypes, /*isVarArg=*/false), "_setjmpex", ReturnsTwiceAttr); - llvm::Value *Buf = - Builder.CreateBitCast(EmitScalarExpr(E->getArg(0)), Int8PtrTy); + llvm::Value *Buf = Builder.CreateBitOrPointerCast( + EmitScalarExpr(E->getArg(0)), Int8PtrTy); llvm::Value *FrameAddr = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::frameaddress), ConstantInt::get(Int32Ty, 0)); @@ -1709,14 +1709,15 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, CS.setAttributes(ReturnsTwiceAttr); return RValue::get(CS.getInstruction()); } + break; } case Builtin::BI_setjmp: { if (getTarget().getTriple().isOSMSVCRT()) { llvm::AttributeSet ReturnsTwiceAttr = AttributeSet::get(getLLVMContext(), llvm::AttributeSet::FunctionIndex, llvm::Attribute::ReturnsTwice); - llvm::Value *Buf = - Builder.CreateBitCast(EmitScalarExpr(E->getArg(0)), Int8PtrTy); + llvm::Value *Buf = Builder.CreateBitOrPointerCast( + EmitScalarExpr(E->getArg(0)), Int8PtrTy); llvm::CallSite CS; if (getTarget().getTriple().getArch() == llvm::Triple::x86) { llvm::Type *ArgTypes[] = {Int8PtrTy, IntTy}; @@ -1740,6 +1741,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, CS.setAttributes(ReturnsTwiceAttr); return RValue::get(CS.getInstruction()); } + break; } case Builtin::BI__GetExceptionInfo: { |