https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90648

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-on-valid-code
           Priority|P3                          |P2

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
The following works around the broken transient state, but it's of course
not a full fix (but the best we can do here without to resorting to
the global built-in decls tables which we do not do in other related code).

I'll leave things to the frontend folks here, I'm not sure why the
non-prototype copysignf128 has to shadow the builtin signature?

Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c      (revision 271803)
+++ gcc/genmatch.c      (working copy)
@@ -3099,10 +3099,12 @@ dt_node::gen_kids_1 (FILE *f, int indent
          gcc_assert (e->operation->kind == id_base::FN);

          fprintf_indent (f, indent, "case %s:\n", e->operation->id);
-         fprintf_indent (f, indent, "  {\n");
-         generic_fns[j]->gen (f, indent + 4, false);
-         fprintf_indent (f, indent, "    break;\n");
-         fprintf_indent (f, indent, "  }\n");
+         fprintf_indent (f, indent, "  if (call_expr_nargs (%s) >= %d)\n"
+                                    "    {\n",
+                                    kid_opname, e->ops.length ());
+         generic_fns[j]->gen (f, indent + 6, false);
+         fprintf_indent (f, indent, "    }\n");
+         fprintf_indent (f, indent, "  break;\n");
        }
       fprintf_indent (f, indent, "default:;\n");

Reply via email to