Skip to content

x86_64 NCG goes via unsigned for FFI Int return types.

With ghc-6.4.2 on x86_64 and using the -fasm NCG we get the wrong answer for this FFI test case:

cbit.c:

int c_id (int n) {
        return n;
}

hsbit.hs:

module Foo where
foreign import ccall unsafe "c_id" c_id :: Int -> IO Int
ghc -c cbit.c
ghc -fffi --make test.hs cbit.o
./a.out
4294967295

Going via C we get the correct answer:

ghc -fvia-C -fffi --make test.hs cbit.o
/tmp/ghc32363.hc:135: warning: implicit declaration of function `c_id'
./a.out
-1

Obviously what's going on is that we're converting to an unsigned int value at some point so negative values are wrapping round.

Trac metadata
Trac field Value
Version 6.4.2
Type Bug
TypeOfFailure OtherFailure
Priority high
Resolution Unresolved
Component Compiler (NCG)
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information