diff options
| author | dias@eecs.tufts.edu <unknown> | 2009-03-16 21:46:54 +0000 |
|---|---|---|
| committer | dias@eecs.tufts.edu <unknown> | 2009-03-16 21:46:54 +0000 |
| commit | 0c84eb9d40b4fab76cc4d72913f9ead409cdbd47 (patch) | |
| tree | 070a4a815ce053d608456ce5af9b09e50877a550 /compiler/codeGen/StgCmmForeign.hs | |
| parent | 5dc8b425443200a5160b9d1399aca1808bfcffee (diff) | |
| download | haskell-0c84eb9d40b4fab76cc4d72913f9ead409cdbd47.tar.gz | |
Inconsistent type and arguments in safe foreign calls...
- The function argument was stripped from the argument list but not from the type.
Now they're both stripped.
Diffstat (limited to 'compiler/codeGen/StgCmmForeign.hs')
| -rw-r--r-- | compiler/codeGen/StgCmmForeign.hs | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/compiler/codeGen/StgCmmForeign.hs b/compiler/codeGen/StgCmmForeign.hs index b8a725520f..64d0203957 100644 --- a/compiler/codeGen/StgCmmForeign.hs +++ b/compiler/codeGen/StgCmmForeign.hs @@ -54,21 +54,21 @@ cgForeignCall :: [LocalReg] -- r1,r2 where to put the results cgForeignCall results result_hints (CCall (CCallSpec target cconv safety)) stg_args = do { cmm_args <- getFCallArgs stg_args - ; let (args, arg_hints) = unzip cmm_args - fc = ForeignConvention cconv arg_hints result_hints - (call_args, cmm_target) - = case target of - StaticTarget lbl -> (args, CmmLit (CmmLabel - (mkForeignLabel lbl (call_size args) False IsFunction))) - DynamicTarget -> case args of - fn:rest -> (rest, fn) - [] -> panic "cgForeignCall []" - call_target = ForeignTarget cmm_target fc - - ; srt <- getSRTInfo NoSRT -- SLPJ: Not sure what SRT - -- is right here + ; let ((call_args, arg_hints), cmm_target) + = case target of + StaticTarget lbl -> + (unzip cmm_args, + CmmLit (CmmLabel (mkForeignLabel lbl (call_size cmm_args) False IsFunction))) + DynamicTarget -> case cmm_args of + (fn,_):rest -> (unzip rest, fn) + [] -> panic "cgForeignCall []" + fc = ForeignConvention cconv arg_hints result_hints + call_target = ForeignTarget cmm_target fc + + ; srt <- getSRTInfo NoSRT -- SLPJ: Not sure what SRT + -- is right here -- JD: Does it matter in the new codegen? - ; emitForeignCall safety results call_target call_args srt CmmMayReturn } + ; emitForeignCall safety results call_target call_args srt CmmMayReturn } where -- in the stdcall calling convention, the symbol needs @size appended -- to it, where size is the total number of bytes of arguments. We @@ -79,7 +79,7 @@ cgForeignCall results result_hints (CCall (CCallSpec target cconv safety)) stg_a | otherwise = Nothing -- ToDo: this might not be correct for 64-bit API - arg_size arg = max (widthInBytes $ typeWidth $ cmmExprType arg) wORD_SIZE + arg_size (arg, _) = max (widthInBytes $ typeWidth $ cmmExprType arg) wORD_SIZE cgForeignCall _ _ (DNCall _) _ = panic "cgForeignCall: DNCall" |
