https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92661
--- Comment #5 from Peter Bergner <bergner at gcc dot gnu.org> --- (In reply to jos...@codesourcery.com from comment #4) > My suggestion for the target-specific built-in functions would be: > > * builtin_function_type in rs6000-call.c should detect the case of a > DECIMAL_FLOAT_MODE_P mode and NULL_TREE ret_type and return NULL_TREE in > place of the existing error in that case. > > * rs6000_common_init_builtins should then accept a NULL_TREE type as > indicating not to call def_builtin (or def_builtin could accept it as > indicating to return early). The following implements that idea, although, we have to test the arguments for similar issues as the return type. It fixes my powerpc64le-linux --disable-decimal-float build. David, can you test this on AIX? 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 + without an error. */ + 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 + without an error. */ + 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 "