This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] rs6000: Fix PR92661, Do not define DFP builtin functions, if DFP has been disabled
- From: Peter Bergner <peter at bergner dot org>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Segher Boessenkool <segher at kernel dot crashing dot org>
- Date: Wed, 27 Nov 2019 15:27:29 -0600
- Subject: [PATCH] rs6000: Fix PR92661, Do not define DFP builtin functions, if DFP has been disabled
This patch fixes the bootstrap breakage in the rs6000 port caused by the
recent patch from Joseph that disables adding the _Decimal* types when
DFP has been disabled. It's based on Joseph's suggestion from the
bugzilla.
This passed bootstrap and regtesting on powerpc64*-linux and Iain
confirmed this fixes his Darwin build as well. Segher preapproved
this patch, so I have committed it now to get bootstrap working
again.
We still have some testsuite fallout due to builtin functions that overload
builtins that have been disabled due to the decimal types being disabled.
I'm still working on resolving that.
Peter
PR bootstrap/92661
* config/rs6000/rs6000-call.c: (def_builtin): Do not define the
builtin if we don't have an actual type.
(builtin_function_type): If the builtin function uses a DFP type
and decimal float has been disabled, then return NULL_TREE.
Index: gcc/config/rs6000/rs6000-call.c
===================================================================
--- gcc/config/rs6000/rs6000-call.c (revision 278692)
+++ gcc/config/rs6000/rs6000-call.c (working copy)
@@ -2935,6 +2935,10 @@ def_builtin (const char *name, tree type
unsigned classify = rs6000_builtin_info[(int)code].attr;
const char *attr_string = "";
+ /* Don't define the builtin if it doesn't have a type. See PR92661. */
+ if (type == NULL_TREE)
+ return;
+
gcc_assert (name != NULL);
gcc_assert (IN_RANGE ((int)code, 0, (int)RS6000_BUILTIN_COUNT));
@@ -7702,6 +7706,11 @@ builtin_function_type (machine_mode mode
if (!ret_type && h.uns_p[0])
ret_type = builtin_mode_to_type[h.mode[0]][0];
+ /* If the required decimal float type has been disabled,
+ then return NULL_TREE. */
+ if (!ret_type && DECIMAL_FLOAT_MODE_P (h.mode[0]))
+ return NULL_TREE;
+
if (!ret_type)
fatal_error (input_location,
"internal error: builtin function %qs had an unexpected "
@@ -7719,6 +7728,11 @@ builtin_function_type (machine_mode mode
if (!arg_type[i] && uns_p)
arg_type[i] = builtin_mode_to_type[m][0];
+ /* If the required decimal float type has been disabled,
+ then return NULL_TREE. */
+ if (!arg_type[i] && DECIMAL_FLOAT_MODE_P (m))
+ return NULL_TREE;
+
if (!arg_type[i])
fatal_error (input_location,
"internal error: builtin function %qs, argument %d "