Skip to content

Wrong size for Int in arguments to functions wrapped to FunPtr by FFI wrappers (on 64-bit machine)

An operation

  foo :: Int -> IO ()

is wrapped to a function pointer ptr :: FunPtr (Int -> IO ()) (via an FFI wrapper). If you pass this pointer to a C function, that calls it with a negative parameter (e.g. -1), the operation is executed with a positive parameter (something near 4294967295 ( == 2 ^ 32 - 1)).

This works correctly on x86 (32-bit).

See attachment for an example.

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