Fixed: Fortran_DOUBLE was being set to C_LONG_DOUBLE when C_LONG_DOUBLE is not available.

This commit is contained in:
M. Scot Breitenfeld 2016-09-29 11:52:12 -05:00
parent c28c6873fe
commit 9fbebbe6d7
3 changed files with 20 additions and 12 deletions

View File

@ -342,7 +342,7 @@ int main(void)
if (RealKinds[i] > 0) {
sprintf(chrA, "Fortran_REAL_%s", Real_C_TYPES[i]);
sprintf(chrB, "real_%s_f", Real_C_TYPES[i]);
writeToFiles("float",chrA, chrB, RealKinds[i], RealKinds_SizeOf[i]);
writeToFiles("float",chrA, chrB, RealKinds[i], RealKinds[i]);
}
}
@ -356,13 +356,15 @@ int main(void)
/* Error: couldn't find a size for hid_t */
return -1;
}
/* real_f */
if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(long double))
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE!=0
if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(long double)) {
writeToFilesChr("float","Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_LONG_DOUBLE");
else if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(double))
} else
#endif
if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(double)) {
writeToFilesChr("float","Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_DOUBLE");
else if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(float))
} else if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(float))
writeToFilesChr("float","Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_FLOAT");
else {
/* No exact match, choose the next highest */
@ -380,20 +382,23 @@ int main(void)
}
/* double_f */
if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(long double))
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE!=0
if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(long double)){
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_LONG_DOUBLE");
else if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(double))
} else
#endif
if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(double)) {
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_DOUBLE");
else if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(float))
} else if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(float))
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_FLOAT");
#ifdef H5_HAVE_FLOAT128
/* Don't select a higher precision than Fortran can support */
else if(sizeof(__float128) == H5_FORTRAN_NATIVE_DOUBLE_SIZEOF && H5_PAC_FC_MAX_REAL_PRECISION > 28) {
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_FLOAT128");
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "Fortran_REAL_C_FLOAT128");
}
#else
else if(sizeof(long double) == H5_FORTRAN_NATIVE_DOUBLE_SIZEOF && H5_PAC_FC_MAX_REAL_PRECISION > 28) {
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_FLOAT128");
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "Fortran_REAL_C_FLOAT128");
}
#endif
else {

View File

@ -66,6 +66,7 @@ SUBROUTINE test_array_compound_atomic(total_error)
CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray1.h5"
TYPE s1_t
SEQUENCE
INTEGER :: i
REAL :: f
END TYPE s1_t
@ -298,7 +299,8 @@ END SUBROUTINE test_array_compound_atomic
INTEGER, PARAMETER :: SPACE1_DIM1 = 4
CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray2.h5"
TYPE st_t_struct ! Typedef for compound datatype
TYPE st_t_struct ! Typedef for compound datatype
SEQUENCE
INTEGER :: i
REAL, DIMENSION(1:ARRAY2_DIM1) :: f
CHARACTER(LEN=2), DIMENSION(1:ARRAY2_DIM1) :: c

View File

@ -40,7 +40,8 @@ MODULE TH5_MISC
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
! generic compound datatype
TYPE, BIND(C) :: comp_datatype
TYPE :: comp_datatype
SEQUENCE
REAL :: a
INTEGER :: x
DOUBLE PRECISION :: y