summaryrefslogtreecommitdiffstats
path: root/fortran/src/H5match_types.c
diff options
context:
space:
mode:
authorScot Breitenfeld <brtnfld@hdfgroup.org>2015-06-04 20:26:02 (GMT)
committerScot Breitenfeld <brtnfld@hdfgroup.org>2015-06-04 20:26:02 (GMT)
commit043173a689015960758c0276486eca9e7a223366 (patch)
treea46d5a93e1bad794cf8bac37f1e4b41a5e200b98 /fortran/src/H5match_types.c
parent4d500d49023156f1f8ef60375e63ac22e79e1749 (diff)
downloadhdf5-043173a689015960758c0276486eca9e7a223366.zip
hdf5-043173a689015960758c0276486eca9e7a223366.tar.gz
hdf5-043173a689015960758c0276486eca9e7a223366.tar.bz2
[svn-r27151] fixed __float128 errors
Diffstat (limited to 'fortran/src/H5match_types.c')
-rw-r--r--fortran/src/H5match_types.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c
index 2067f60..5ac5c80 100644
--- a/fortran/src/H5match_types.c
+++ b/fortran/src/H5match_types.c
@@ -206,28 +206,28 @@ int main(void)
/* (b) Define c_float_x */
- /* make sure we find long double first before checking for __float128
- * ideally we need to match precision instead of matching sizeof */
-
- int found_longdb = 0;
+ int found_long_double = 0;
for(i=0;i< H5_FORTRAN_NUM_REAL_KINDS;i++) {
+
+ if (sizeof(float) == RealKinds_SizeOf[i]) {
+ writeTypedef("float", "float", RealKinds[i]);
+ strcpy(Real_C_TYPES[i], "C_FLOAT");
+ } else if(sizeof(double) == RealKinds_SizeOf[i]) {
+ writeTypedef("float", "double", RealKinds[i]);
+ strcpy(Real_C_TYPES[i], "C_DOUBLE");
+ } else if(sizeof(long double) == RealKinds_SizeOf[i] && found_long_double == 0) {
+ writeTypedef("float", "long double", RealKinds[i]);
+ strcpy(Real_C_TYPES[i], "C_LONG_DOUBLE");
+ found_long_double = 1;
+ }
#ifdef H5_HAVE_FLOAT128
- if(sizeof(__float128) == RealKinds_SizeOf[i] && found_longdb == 1) {
+ /* Don't select a higher precision than Fortran can support */
+ else if(sizeof(__float128) == RealKinds_SizeOf[i] && found_long_double == 1 && H5_PAC_FC_MAX_REAL_PRECISION > 28) {
writeTypedef("float", "__float128", RealKinds[i]);
strcpy(Real_C_TYPES[i], "C_FLOAT128");
- } else
+ }
#endif
- if(sizeof(long double) == RealKinds_SizeOf[i]) {
- found_longdb = 1;
- writeTypedef("float", "long double", RealKinds[i]);
- strcpy(Real_C_TYPES[i], "C_LONG_DOUBLE");
- } else if(sizeof(double) == RealKinds_SizeOf[i]) {
- writeTypedef("float", "double", RealKinds[i]);
- strcpy(Real_C_TYPES[i], "C_DOUBLE");
- } else if(sizeof(float) == RealKinds_SizeOf[i]) {
- writeTypedef("float", "float", RealKinds[i]);
- strcpy(Real_C_TYPES[i], "C_FLOAT");
- } else {
+ else {
printf(" **** HDF5 WARNING ****/n");
printf("Fortran REAL is %d bytes, but no corresponding C floating type exists\n",RealKinds_SizeOf[i]);
printf("Fortran Interfaces for Fortran REALs of %d bytes will not exist\n",RealKinds_SizeOf[i]);