Mercurial > projects > ldc
diff 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 |
line wrap: on
line diff
--- a/gen/toir.c Fri Oct 26 15:14:51 2007 +0200 +++ b/gen/toir.c Sun Oct 28 02:03:42 2007 +0200 @@ -1254,7 +1254,13 @@ e->val = call; // set calling convention - if ((fn->funcdecl && (fn->funcdecl->llvmInternal != LLVMintrinsic && fn->funcdecl->llvmInternal != LLVMva_start)) || delegateCall) + if (fn->funcdecl) { + int li = fn->funcdecl->llvmInternal; + if (li != LLVMintrinsic && li != LLVMva_start && li != LLVMva_intrinsic) { + call->setCallingConv(LLVM_DtoCallingConv(dlink)); + } + } + else if (delegateCall) call->setCallingConv(LLVM_DtoCallingConv(dlink)); else if (fn->callconv != (unsigned)-1) call->setCallingConv(fn->callconv); @@ -1600,7 +1606,8 @@ e->callconv = LLVM_DtoCallingConv(fdecl->linkage); } e->val = funcval; - e->type = elem::VAL; + e->type = elem::FUNC; + e->funcdecl = fdecl; } else { printf("unknown: %s\n", var->toChars());