[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

ocaml build failure on ia64 with gcc4



Hi,

the ocaml debian package fails to build on ia64 with the new gcc, with
errors in byterun/interp.c:
gcc -DCAML_NAME_SPACE -O -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT   -c -o interp.o interp.c
interp.c: In function 'caml_interprete':
interp.c:297: error: invalid lvalue in increment
interp.c:299: error: invalid lvalue in increment
interp.c:301: error: invalid lvalue in increment
interp.c:303: error: invalid lvalue in increment
...

(A full build log is available at
http://buildd.debian.org/fetch.php?&pkg=ocaml&ver=3.08.3-6&arch=ia64&stamp=1123386582&file=log&as=raw)

The problem seems to be the "Next" macro, which is different on ia64
than on other archs:
#  ifdef DEBUG
#    define Next goto next_instr
#  else
#    ifdef __ia64__
#      define Next goto *(void *)(jumptbl_base + *((uint32 *) pc)++)
#    else
#      define Next goto *(void *)(jumptbl_base + *pc++)
#    endif
#  endif

I believe that using the following on ia64 instead should work, but
since I am no expert, I'd like to get the caml team's advice :)
(I don't really understand why this cast is there, and why it's there
only on ia64, but it has been added in 2000, as part of the ia64 port)
#define Next goto *(void*)(jumptbl_base + (uint32)*pc++)

Alternately, I wonder if opcode_t could be defined as uint32 instead of
int32, which would probably solve this problem (assuming it doesn't need
to be signed).


Thanks,
Julien Cristau

Attachment: signature.asc
Description: Digital signature


Reply to: