changeset 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 d4a678905d5e
children f918f3e2e99e
files gen/toir.c test/dotproduct.d
diffstat 2 files changed, 11 insertions(+), 4 deletions(-) [+]
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());
--- a/test/dotproduct.d	Fri Oct 26 15:14:51 2007 +0200
+++ b/test/dotproduct.d	Sun Oct 28 02:03:42 2007 +0200
@@ -17,12 +17,12 @@
 {
     printf("Dot Product test\n");
 
-    const float f = 0.7071067811865474617f;
+    const f = 0.7071067811865474617;
     vec3 v = vec3(f,f,0);
     vec3 w = vec3(f,0,f);
 
     v.print("v");
-    v.print("w");
+    w.print("w");
 
     auto dp = v.dot(w);
     printf("v ยท w = %f\n", dp);