[Bug fortran/106777] New: Permit TFmode (real(16)/float128) in gfortran if GLIBC supports it and --disable-libquadmath(-support)
burnus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Aug 30 11:23:07 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106777
Bug ID: 106777
Summary: Permit TFmode (real(16)/float128) in gfortran if GLIBC
supports it and --disable-libquadmath(-support)
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
Target Milestone: ---
Currently, a lot of code requires that libquadmath building and usage is
enabled to
to support TFmode 'real(16)' in gfortran.
Those are enabled by default (if supportable) but can be disabled by an
explicit
--disable-libquadmath or --disable-libquadmath-support
→ https://gcc.gnu.org/install/configure.html
However, newer GLIBC support this type directly, making libquadmath obsolete.
→ https://gcc.gnu.org/r13-1324-g133d0d422ebd18dbd215cfa5394aff9f938e7060
Thus, if supported by GLIBC, REAL(16)* could be still supported even if
libquadmath is not build. (*on x86_64; PowerPC has additional kind values.)
* * *
However, there is a lot of code which checks for libquadmath such that
disabling
it will also disable READ(16), even if it could be supported.
One possible first but insufficient patch would be the following.
(I have not checked whether the conditions are correct), but much more is
required:
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -442,9 +442,12 @@ gfc_init_kinds (void)
continue;
if (mode != TYPE_MODE (float_type_node)
&& (mode != TYPE_MODE (double_type_node))
&& (mode != TYPE_MODE (long_double_type_node))
-#if defined(HAVE_TFmode) && defined(ENABLE_LIBQUADMATH_SUPPORT)
+#if defined(HAVE_TFmode) \
+ && (defined(ENABLE_LIBQUADMATH_SUPPORT) \
+ || TARGET_GLIBC_MAJOR > 2 \
+ || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 26))
&& (mode != TFmode)
#endif
)
continue;
More information about the Gcc-bugs
mailing list