Made the size of INT in occam be based on the size of void* in C
I also stopped there being separate sizes for C and C++ since that wasn't supported properly in the compiler anyway. Fixes #37
This commit is contained in:
parent
9aa698aac3
commit
4add133d5b
|
@ -8,10 +8,10 @@ cBoolSize, cxxBoolSize, cIntSize, cxxIntSize :: Int
|
||||||
cBoolSize = @C_BOOL_SIZE@
|
cBoolSize = @C_BOOL_SIZE@
|
||||||
cxxBoolSize = @CXX_BOOL_SIZE@
|
cxxBoolSize = @CXX_BOOL_SIZE@
|
||||||
cIntSize = @C_INT_SIZE@
|
cIntSize = @C_INT_SIZE@
|
||||||
cxxIntSize = @CXX_INT_SIZE@
|
cxxIntSize = cIntSize
|
||||||
type CIntReplacement = @C_INT_EQUIV@
|
type CIntReplacement = @C_INT_EQUIV@
|
||||||
type CXXIntReplacement = @CXX_INT_EQUIV@
|
type CXXIntReplacement = CIntReplacement
|
||||||
cIntReplacement, cXXIntReplacement :: A.Type
|
cIntReplacement, cXXIntReplacement :: A.Type
|
||||||
cIntReplacement = A.@C_INT_EQUIV@
|
cIntReplacement = A.@C_INT_EQUIV@
|
||||||
cXXIntReplacement = A.@CXX_INT_EQUIV@
|
cXXIntReplacement = cIntReplacement
|
||||||
|
|
||||||
|
|
25
configure.ac
25
configure.ac
|
@ -197,24 +197,19 @@ AM_CONDITIONAL([GHC68],[test $ghc_version_major -ge 6 -a $ghc_version_mid -ge 8]
|
||||||
# Check the sizes of certain constructs. We'll need to be cleverer if in future
|
# Check the sizes of certain constructs. We'll need to be cleverer if in future
|
||||||
# we want to allow cross-compilation.
|
# we want to allow cross-compilation.
|
||||||
|
|
||||||
#There is a subtle trick below. If you ask autoconf for the size of int
|
|
||||||
#in both C and C++, it caches the result from one to the other.
|
|
||||||
#To allow for the possibility of the C and C++ compilers having a
|
|
||||||
#different size int (seems unlikely, but perhaps possible with cross
|
|
||||||
#compilation) we use unsigned int in C++ and int in C.
|
|
||||||
AC_LANG(C++)
|
AC_LANG(C++)
|
||||||
AC_CHECK_SIZEOF(bool)
|
AC_CHECK_SIZEOF(bool)
|
||||||
AC_COMPUTE_INT(CXX_BOOL_SIZE,SIZEOF_BOOL)
|
AC_COMPUTE_INT(CXX_BOOL_SIZE,SIZEOF_BOOL)
|
||||||
AC_SUBST(CXX_BOOL_SIZE)
|
AC_SUBST(CXX_BOOL_SIZE)
|
||||||
AC_CHECK_SIZEOF(unsigned int)
|
|
||||||
AC_COMPUTE_INT(CXX_INT_SIZE,SIZEOF_UNSIGNED_INT)
|
|
||||||
AC_SUBST(CXX_INT_SIZE)
|
|
||||||
AC_LANG(C)
|
AC_LANG(C)
|
||||||
AC_CHECK_SIZEOF(_Bool)
|
AC_CHECK_SIZEOF(_Bool)
|
||||||
AC_COMPUTE_INT(C_BOOL_SIZE,SIZEOF__BOOL)
|
AC_COMPUTE_INT(C_BOOL_SIZE,SIZEOF__BOOL)
|
||||||
AC_SUBST(C_BOOL_SIZE)
|
AC_SUBST(C_BOOL_SIZE)
|
||||||
AC_CHECK_SIZEOF(int)
|
|
||||||
AC_COMPUTE_INT(C_INT_SIZE,SIZEOF_INT)
|
#We use sizeof(void*) to work out the size for INT,
|
||||||
|
#because the C int type is 32-bit on both 32-bit and 64-bit platforms (with GCC, x86/x86-64).
|
||||||
|
AC_CHECK_SIZEOF(void*)
|
||||||
|
AC_COMPUTE_INT(C_INT_SIZE,SIZEOF_VOIDP)
|
||||||
AC_SUBST(C_INT_SIZE)
|
AC_SUBST(C_INT_SIZE)
|
||||||
|
|
||||||
if test "x$C_INT_SIZE" = "x2"; then
|
if test "x$C_INT_SIZE" = "x2"; then
|
||||||
|
@ -226,17 +221,7 @@ fi
|
||||||
if test "x$C_INT_SIZE" = "x8"; then
|
if test "x$C_INT_SIZE" = "x8"; then
|
||||||
C_INT_EQUIV=Int64
|
C_INT_EQUIV=Int64
|
||||||
fi
|
fi
|
||||||
if test "x$CXX_INT_SIZE" = "x2"; then
|
|
||||||
CXX_INT_EQUIV=Int16
|
|
||||||
fi
|
|
||||||
if test "x$CXX_INT_SIZE" = "x4"; then
|
|
||||||
CXX_INT_EQUIV=Int32
|
|
||||||
fi
|
|
||||||
if test "x$CXX_INT_SIZE" = "x8"; then
|
|
||||||
CXX_INT_EQUIV=Int64
|
|
||||||
fi
|
|
||||||
AC_SUBST(C_INT_EQUIV)
|
AC_SUBST(C_INT_EQUIV)
|
||||||
AC_SUBST(CXX_INT_EQUIV)
|
|
||||||
|
|
||||||
CFLAGS="$CFLAGS $no_strict_overflow $no_tree_vrp"
|
CFLAGS="$CFLAGS $no_strict_overflow $no_tree_vrp"
|
||||||
# The reason for -fno-strict-overflow and -fno-tree-vrp above is that with the way I have implemented
|
# The reason for -fno-strict-overflow and -fno-tree-vrp above is that with the way I have implemented
|
||||||
|
|
Loading…
Reference in New Issue
Block a user