Mercurial > projects > ldc
comparison gen/toobj.cpp @ 707:1556a9328ba1
Fixed bug with generated functions having wrong calling conventions. Thanks downs.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Wed, 15 Oct 2008 20:22:18 +0200 |
parents | ed9a9e6dd1cc |
children | fd5665da3a27 |
comparison
equal
deleted
inserted
replaced
706:611ba592723b | 707:1556a9328ba1 |
---|---|
487 | 487 |
488 std::vector<const LLType*> argsTy; | 488 std::vector<const LLType*> argsTy; |
489 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); | 489 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); |
490 assert(gIR->module->getFunction(name) == NULL); | 490 assert(gIR->module->getFunction(name) == NULL); |
491 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); | 491 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); |
492 fn->setCallingConv(llvm::CallingConv::Fast); | 492 fn->setCallingConv(DtoCallingConv(LINKd)); |
493 | 493 |
494 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); | 494 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); |
495 IRBuilder<> builder(bb); | 495 IRBuilder<> builder(bb); |
496 | 496 |
497 // debug info | 497 // debug info |
502 } | 502 } |
503 | 503 |
504 for (size_t i=0; i<n; i++) { | 504 for (size_t i=0; i<n; i++) { |
505 llvm::Function* f = gIR->ctors[i]->ir.irFunc->func; | 505 llvm::Function* f = gIR->ctors[i]->ir.irFunc->func; |
506 llvm::CallInst* call = builder.CreateCall(f,""); | 506 llvm::CallInst* call = builder.CreateCall(f,""); |
507 call->setCallingConv(llvm::CallingConv::Fast); | 507 call->setCallingConv(DtoCallingConv(LINKd)); |
508 } | 508 } |
509 | 509 |
510 // debug info end | 510 // debug info end |
511 if(global.params.symdebug) | 511 if(global.params.symdebug) |
512 builder.CreateCall(gIR->module->getFunction("llvm.dbg.region.end"), DBG_CAST(subprog)); | 512 builder.CreateCall(gIR->module->getFunction("llvm.dbg.region.end"), DBG_CAST(subprog)); |
532 | 532 |
533 std::vector<const LLType*> argsTy; | 533 std::vector<const LLType*> argsTy; |
534 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); | 534 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); |
535 assert(gIR->module->getFunction(name) == NULL); | 535 assert(gIR->module->getFunction(name) == NULL); |
536 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); | 536 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); |
537 fn->setCallingConv(llvm::CallingConv::Fast); | 537 fn->setCallingConv(DtoCallingConv(LINKd)); |
538 | 538 |
539 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); | 539 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); |
540 IRBuilder<> builder(bb); | 540 IRBuilder<> builder(bb); |
541 | 541 |
542 // debug info | 542 // debug info |
547 } | 547 } |
548 | 548 |
549 for (size_t i=0; i<n; i++) { | 549 for (size_t i=0; i<n; i++) { |
550 llvm::Function* f = gIR->dtors[i]->ir.irFunc->func; | 550 llvm::Function* f = gIR->dtors[i]->ir.irFunc->func; |
551 llvm::CallInst* call = builder.CreateCall(f,""); | 551 llvm::CallInst* call = builder.CreateCall(f,""); |
552 call->setCallingConv(llvm::CallingConv::Fast); | 552 call->setCallingConv(DtoCallingConv(LINKd)); |
553 } | 553 } |
554 | 554 |
555 // debug info end | 555 // debug info end |
556 if(global.params.symdebug) | 556 if(global.params.symdebug) |
557 builder.CreateCall(gIR->module->getFunction("llvm.dbg.region.end"), DBG_CAST(subprog)); | 557 builder.CreateCall(gIR->module->getFunction("llvm.dbg.region.end"), DBG_CAST(subprog)); |
577 | 577 |
578 std::vector<const LLType*> argsTy; | 578 std::vector<const LLType*> argsTy; |
579 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); | 579 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false); |
580 assert(gIR->module->getFunction(name) == NULL); | 580 assert(gIR->module->getFunction(name) == NULL); |
581 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); | 581 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); |
582 fn->setCallingConv(llvm::CallingConv::Fast); | 582 fn->setCallingConv(DtoCallingConv(LINKd)); |
583 | 583 |
584 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); | 584 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); |
585 IRBuilder<> builder(bb); | 585 IRBuilder<> builder(bb); |
586 | 586 |
587 // debug info | 587 // debug info |
592 } | 592 } |
593 | 593 |
594 for (size_t i=0; i<n; i++) { | 594 for (size_t i=0; i<n; i++) { |
595 llvm::Function* f = gIR->unitTests[i]->ir.irFunc->func; | 595 llvm::Function* f = gIR->unitTests[i]->ir.irFunc->func; |
596 llvm::CallInst* call = builder.CreateCall(f,""); | 596 llvm::CallInst* call = builder.CreateCall(f,""); |
597 call->setCallingConv(llvm::CallingConv::Fast); | 597 call->setCallingConv(DtoCallingConv(LINKd)); |
598 } | 598 } |
599 | 599 |
600 // debug info end | 600 // debug info end |
601 if(global.params.symdebug) | 601 if(global.params.symdebug) |
602 builder.CreateCall(gIR->module->getFunction("llvm.dbg.region.end"), DBG_CAST(subprog)); | 602 builder.CreateCall(gIR->module->getFunction("llvm.dbg.region.end"), DBG_CAST(subprog)); |