mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
[svn-r9809] Purpose: bug fix
Description: For HP-UX11.00, compiler's casting from 'long double' to most of integers. A macro was hard set in config/hpux11.00 before. Solution: Let configure detect this case and set the macro. Platforms tested: kelgia, fuss, modi4. These systems are mainly concerned.
This commit is contained in:
parent
7b42f786bd
commit
7945e9929e
@ -97,9 +97,3 @@ case "X-$CXX" in
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
esac
|
||||
|
||||
# Set flag to avoid conversion from 'long double' to integers because of
|
||||
# HP-UX's compiler problems. For HP-UX 11.00, the compiler has 'floating exception'
|
||||
# when converting 'long double' to all integers except 'unsigned long long'.
|
||||
# Other HP-UX systems are unknown yet. (1/8/05 - SLU)
|
||||
hdf5_cv_sw_ldouble_to_integer_works=${hdf5_cv_sw_ldouble_to_integer_works='no'}
|
||||
|
54
configure
vendored
54
configure
vendored
@ -33548,12 +33548,66 @@ else
|
||||
echo "${ECHO_T}no" >&6
|
||||
fi
|
||||
|
||||
|
||||
echo "$as_me:$LINENO: checking if accurately converting from long double to integers works" >&5
|
||||
echo $ECHO_N "checking if accurately converting from long double to integers works... $ECHO_C" >&6
|
||||
|
||||
if test "${hdf5_cv_sw_ldouble_to_integer_works+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
if test "$cross_compiling" = yes; then
|
||||
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
|
||||
echo "$as_me: error: cannot run test program while cross compiling" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
else
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
#line $LINENO "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
void *align;
|
||||
long double ld= 9701917572145405952.00L;
|
||||
unsigned char v1;
|
||||
short v2;
|
||||
unsigned int v3;
|
||||
int ret = 0;
|
||||
|
||||
align = (void*)malloc(sizeof(long double));
|
||||
memcpy(align, &ld, sizeof(long double));
|
||||
|
||||
/*For HU-UX11.00, there's floating exception(core dump) when doing some of casting
|
||||
*from 'long double' to integers*/
|
||||
v1=(unsigned char)(*((long double*)align));
|
||||
v2=(short)(*((long double*)align));
|
||||
v3=(unsigned int)(*((long double*)align));
|
||||
|
||||
done:
|
||||
exit(ret);
|
||||
}
|
||||
|
||||
_ACEOF
|
||||
rm -f conftest$ac_exeext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
(eval $ac_link) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
hdf5_cv_sw_ldouble_to_integer_works=yes
|
||||
else
|
||||
echo "$as_me: program exited with status $ac_status" >&5
|
||||
echo "$as_me: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
( exit $ac_status )
|
||||
hdf5_cv_sw_ldouble_to_integer_works=no
|
||||
fi
|
||||
rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
36
configure.in
36
configure.in
@ -2509,13 +2509,39 @@ fi
|
||||
|
||||
dnl -----------------------------------------------------------------------
|
||||
dnl Set flag to indicate that the machine can handle conversion from
|
||||
dnl long double to integers. (This flag should be set "yes" for all
|
||||
dnl machines except all SGIs and HP-UX 11.00, where some conversions are
|
||||
dnl long double to integers. This flag should be set "yes" for all
|
||||
dnl machines except all SGIs and HP-UX 11.00. For SGIs, some conversions are
|
||||
dnl incorrect and its cache value is set "no" in its config/irix6.x and
|
||||
dnl irix5.x and config/hpux11.00 files.)
|
||||
dnl
|
||||
dnl irix5.x. For HP-UX 11.00, the compiler has 'floating exception'
|
||||
dnl when converting 'long double' to all integers except 'unsigned long long'.
|
||||
dnl Other HP-UX systems are unknown yet. (1/8/05 - SLU)
|
||||
|
||||
AC_MSG_CHECKING([if accurately converting from long double to integers works])
|
||||
AC_CACHE_VAL([hdf5_cv_sw_ldouble_to_integer_works], [hdf5_cv_sw_ldouble_to_integer_works=yes])
|
||||
|
||||
AC_CACHE_VAL([hdf5_cv_sw_ldouble_to_integer_works],
|
||||
[AC_TRY_RUN([
|
||||
int main(void)
|
||||
{
|
||||
void *align;
|
||||
long double ld= 9701917572145405952.00L;
|
||||
unsigned char v1;
|
||||
short v2;
|
||||
unsigned int v3;
|
||||
int ret = 0;
|
||||
|
||||
align = (void*)malloc(sizeof(long double));
|
||||
memcpy(align, &ld, sizeof(long double));
|
||||
|
||||
/*For HU-UX11.00, there's floating exception(core dump) when doing some of casting
|
||||
*from 'long double' to integers*/
|
||||
v1=(unsigned char)(*((long double*)align));
|
||||
v2=(short)(*((long double*)align));
|
||||
v3=(unsigned int)(*((long double*)align));
|
||||
|
||||
done:
|
||||
exit(ret);
|
||||
}
|
||||
], [hdf5_cv_sw_ldouble_to_integer_works=yes], [hdf5_cv_sw_ldouble_to_integer_works=no],)])
|
||||
|
||||
if test ${hdf5_cv_sw_ldouble_to_integer_works} = "yes"; then
|
||||
AC_DEFINE([SW_LDOUBLE_TO_INTEGER_WORKS], [1],
|
||||
|
Loading…
Reference in New Issue
Block a user