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));