summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorM. Scot Breitenfeld <brtnfld@hdfgroup.org>2016-09-29 16:52:12 (GMT)
committerM. Scot Breitenfeld <brtnfld@hdfgroup.org>2016-09-29 16:52:12 (GMT)
commit9fbebbe6d7c1b873006e24b8b21c88b3d7ba9ab8 (patch)
treeeb9bac1cb19e623328c0b1c5c936d048123233e8
parentc28c6873fedb6a4bec9dfa500d8648610c7ba88f (diff)
downloadhdf5-9fbebbe6d7c1b873006e24b8b21c88b3d7ba9ab8.zip
hdf5-9fbebbe6d7c1b873006e24b8b21c88b3d7ba9ab8.tar.gz
hdf5-9fbebbe6d7c1b873006e24b8b21c88b3d7ba9ab8.tar.bz2
Fixed: Fortran_DOUBLE was being set to C_LONG_DOUBLE when C_LONG_DOUBLE is not available.
-rw-r--r--fortran/src/H5match_types.c25
-rw-r--r--fortran/test/tH5T_F03.F904
-rw-r--r--fortran/test/tf.F903
3 files changed, 20 insertions, 12 deletions
diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c
index 4d62402..2ae78ee 100644
--- a/fortran/src/H5match_types.c
+++ b/fortran/src/H5match_types.c
@@ -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 {
diff --git a/fortran/test/tH5T_F03.F90 b/fortran/test/tH5T_F03.F90
index a9148a7..c8be606 100644
--- a/fortran/test/tH5T_F03.F90
+++ b/fortran/test/tH5T_F03.F90
@@ -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
diff --git a/fortran/test/tf.F90 b/fortran/test/tf.F90
index 219254b..8797cc3 100644
--- a/fortran/test/tf.F90
+++ b/fortran/test/tf.F90
@@ -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