Mercurial > projects > ldc
comparison gen/statements.cpp @ 315:a9697749e898 trunk
[svn r336] Made sure calls within a landing pad area are invokes.
Nested trys still need some consideration.
author | ChristianK |
---|---|
date | Thu, 03 Jul 2008 22:05:45 +0200 |
parents | 8d98e42ece93 |
children | e9c93739bc4c |
comparison
equal
deleted
inserted
replaced
314:8d98e42ece93 | 315:a9697749e898 |
---|---|
711 DValue* e = exp->toElem(p); | 711 DValue* e = exp->toElem(p); |
712 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_throw_exception"); | 712 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_throw_exception"); |
713 //Logger::cout() << "calling: " << *fn << '\n'; | 713 //Logger::cout() << "calling: " << *fn << '\n'; |
714 LLValue* arg = DtoBitCast(e->getRVal(), fn->getFunctionType()->getParamType(0)); | 714 LLValue* arg = DtoBitCast(e->getRVal(), fn->getFunctionType()->getParamType(0)); |
715 //Logger::cout() << "arg: " << *arg << '\n'; | 715 //Logger::cout() << "arg: " << *arg << '\n'; |
716 gIR->ir->CreateCall(fn, arg, ""); | 716 gIR->CreateCallOrInvoke(fn, arg); |
717 gIR->ir->CreateUnreachable(); | 717 gIR->ir->CreateUnreachable(); |
718 | 718 |
719 // need a block after the throw for now | 719 // need a block after the throw for now |
720 llvm::BasicBlock* oldend = gIR->scopeend(); | 720 llvm::BasicBlock* oldend = gIR->scopeend(); |
721 llvm::BasicBlock* bb = llvm::BasicBlock::Create("afterthrow", p->topfunc(), oldend); | 721 llvm::BasicBlock* bb = llvm::BasicBlock::Create("afterthrow", p->topfunc(), oldend); |
779 { | 779 { |
780 llval = val->getRVal(); | 780 llval = val->getRVal(); |
781 } | 781 } |
782 assert(llval->getType() == fn->getFunctionType()->getParamType(1)); | 782 assert(llval->getType() == fn->getFunctionType()->getParamType(1)); |
783 | 783 |
784 llvm::CallInst* call = gIR->ir->CreateCall2(fn, table, llval, "tmp"); | 784 CallOrInvoke* call = gIR->CreateCallOrInvoke2(fn, table, llval, "tmp"); |
785 | 785 |
786 llvm::PAListPtr palist; | 786 llvm::PAListPtr palist; |
787 palist = palist.addAttr(1, llvm::ParamAttr::ByVal); | 787 palist = palist.addAttr(1, llvm::ParamAttr::ByVal); |
788 palist = palist.addAttr(2, llvm::ParamAttr::ByVal); | 788 palist = palist.addAttr(2, llvm::ParamAttr::ByVal); |
789 call->setParamAttrs(palist); | 789 call->setParamAttrs(palist); |
790 | 790 |
791 return call; | 791 return call->get(); |
792 } | 792 } |
793 | 793 |
794 void SwitchStatement::toIR(IRState* p) | 794 void SwitchStatement::toIR(IRState* p) |
795 { | 795 { |
796 Logger::println("SwitchStatement::toIR(): %s", loc.toChars()); | 796 Logger::println("SwitchStatement::toIR(): %s", loc.toChars()); |