From c403a1ce323b9a20fcfd928152da8c59321d2a75 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Fri, 20 Mar 2015 17:03:35 +0000 Subject: MS ABI: Accept calls to an unprototyped declaration of _setjmp This fixes PR22961. llvm-svn: 232824 --- clang/lib/CodeGen/CGBuiltin.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'clang/lib/CodeGen') 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: { -- cgit v1.2.3