comparison gen/toir.c @ 66:0c5f410d973c trunk

[svn r70] Fixed bug where correct calling convention was not set on calling aggregate methods
author lindquist
date Sun, 28 Oct 2007 02:03:42 +0200
parents b688ad419f8c
children f918f3e2e99e
comparison
equal deleted inserted replaced
65:d4a678905d5e 66:0c5f410d973c
1252 e->mem = llargs[0]; 1252 e->mem = llargs[0];
1253 else 1253 else
1254 e->val = call; 1254 e->val = call;
1255 1255
1256 // set calling convention 1256 // set calling convention
1257 if ((fn->funcdecl && (fn->funcdecl->llvmInternal != LLVMintrinsic && fn->funcdecl->llvmInternal != LLVMva_start)) || delegateCall) 1257 if (fn->funcdecl) {
1258 int li = fn->funcdecl->llvmInternal;
1259 if (li != LLVMintrinsic && li != LLVMva_start && li != LLVMva_intrinsic) {
1260 call->setCallingConv(LLVM_DtoCallingConv(dlink));
1261 }
1262 }
1263 else if (delegateCall)
1258 call->setCallingConv(LLVM_DtoCallingConv(dlink)); 1264 call->setCallingConv(LLVM_DtoCallingConv(dlink));
1259 else if (fn->callconv != (unsigned)-1) 1265 else if (fn->callconv != (unsigned)-1)
1260 call->setCallingConv(fn->callconv); 1266 call->setCallingConv(fn->callconv);
1261 1267
1262 delete fn; 1268 delete fn;
1598 funcval = new llvm::LoadInst(funcval,"tmp",p->scopebb()); 1604 funcval = new llvm::LoadInst(funcval,"tmp",p->scopebb());
1599 assert(funcval->getType() == fdecl->llvmValue->getType()); 1605 assert(funcval->getType() == fdecl->llvmValue->getType());
1600 e->callconv = LLVM_DtoCallingConv(fdecl->linkage); 1606 e->callconv = LLVM_DtoCallingConv(fdecl->linkage);
1601 } 1607 }
1602 e->val = funcval; 1608 e->val = funcval;
1603 e->type = elem::VAL; 1609 e->type = elem::FUNC;
1610 e->funcdecl = fdecl;
1604 } 1611 }
1605 else { 1612 else {
1606 printf("unknown: %s\n", var->toChars()); 1613 printf("unknown: %s\n", var->toChars());
1607 assert(0); 1614 assert(0);
1608 } 1615 }