Mercurial > projects > ldc
changeset 933:d3a6f1a96731
Replace assertion with errormessage for unsupported calling conventions. like Pascal. See dstress/run/e/extern_10_A.d
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 04 Feb 2009 00:04:09 +0100 |
parents | 5e3bb0c3ea8b |
children | b56f3571c450 |
files | gen/functions.cpp gen/llvmhelpers.h gen/tocall.cpp gen/toobj.cpp |
diffstat | 4 files changed, 14 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/functions.cpp Tue Feb 03 23:48:47 2009 +0100 +++ b/gen/functions.cpp Wed Feb 04 00:04:09 2009 +0100 @@ -528,7 +528,7 @@ // calling convention if (!vafunc && fdecl->llvmInternal != LLVMintrinsic) - func->setCallingConv(DtoCallingConv(f->linkage)); + func->setCallingConv(DtoCallingConv(fdecl->loc, f->linkage)); else // fall back to C, it should be the right thing to do func->setCallingConv(llvm::CallingConv::C);
--- a/gen/llvmhelpers.h Tue Feb 03 23:48:47 2009 +0100 +++ b/gen/llvmhelpers.h Wed Feb 04 00:04:09 2009 +0100 @@ -113,7 +113,7 @@ //////////////////////////////////////////// /// convert DMD calling conv to LLVM -unsigned DtoCallingConv(LINK l); +unsigned DtoCallingConv(Loc loc, LINK l); /// TypeFunction* DtoTypeFunction(DValue* fnval);
--- a/gen/tocall.cpp Tue Feb 03 23:48:47 2009 +0100 +++ b/gen/tocall.cpp Wed Feb 04 00:04:09 2009 +0100 @@ -33,7 +33,7 @@ ////////////////////////////////////////////////////////////////////////////////////////// -unsigned DtoCallingConv(LINK l) +unsigned DtoCallingConv(Loc loc, LINK l) { if (l == LINKc || l == LINKcpp || l == LINKintrinsic) return llvm::CallingConv::C; @@ -50,7 +50,10 @@ else if (l == LINKwindows) return llvm::CallingConv::X86_StdCall; else - assert(0 && "Unsupported calling convention"); + { + error(loc, "unsupported calling convention"); + fatal(); + } } ////////////////////////////////////////////////////////////////////////////////////////// @@ -235,7 +238,7 @@ bool nestedcall = tf->usesNest; bool dvarargs = (tf->linkage == LINKd && tf->varargs == 1); - unsigned callconv = DtoCallingConv(tf->linkage); + unsigned callconv = DtoCallingConv(loc, tf->linkage); // get callee llvm value LLValue* callable = DtoCallableValue(fnval);
--- a/gen/toobj.cpp Tue Feb 03 23:48:47 2009 +0100 +++ b/gen/toobj.cpp Wed Feb 04 00:04:09 2009 +0100 @@ -417,7 +417,7 @@ const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); assert(gIR->module->getFunction(name) == NULL); llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); - fn->setCallingConv(DtoCallingConv(LINKd)); + fn->setCallingConv(DtoCallingConv(0, LINKd)); llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); IRBuilder<> builder(bb); @@ -432,7 +432,7 @@ for (size_t i=0; i<n; i++) { llvm::Function* f = gIR->ctors[i]->ir.irFunc->func; llvm::CallInst* call = builder.CreateCall(f,""); - call->setCallingConv(DtoCallingConv(LINKd)); + call->setCallingConv(DtoCallingConv(0, LINKd)); } // debug info end @@ -462,7 +462,7 @@ const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); assert(gIR->module->getFunction(name) == NULL); llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); - fn->setCallingConv(DtoCallingConv(LINKd)); + fn->setCallingConv(DtoCallingConv(0, LINKd)); llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); IRBuilder<> builder(bb); @@ -477,7 +477,7 @@ for (size_t i=0; i<n; i++) { llvm::Function* f = gIR->dtors[i]->ir.irFunc->func; llvm::CallInst* call = builder.CreateCall(f,""); - call->setCallingConv(DtoCallingConv(LINKd)); + call->setCallingConv(DtoCallingConv(0, LINKd)); } // debug info end @@ -507,7 +507,7 @@ const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); assert(gIR->module->getFunction(name) == NULL); llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); - fn->setCallingConv(DtoCallingConv(LINKd)); + fn->setCallingConv(DtoCallingConv(0, LINKd)); llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); IRBuilder<> builder(bb); @@ -522,7 +522,7 @@ for (size_t i=0; i<n; i++) { llvm::Function* f = gIR->unitTests[i]->ir.irFunc->func; llvm::CallInst* call = builder.CreateCall(f,""); - call->setCallingConv(DtoCallingConv(LINKd)); + call->setCallingConv(DtoCallingConv(0, LINKd)); } // debug info end