public inbox for
help / color / mirror / Atom feed
From: Kewen Lin <>
Subject: [gcc r13-2642] rs6000: Handle unresolved overloaded builtin [PR105485]
Date: Tue, 13 Sep 2022 10:40:26 +0000 (GMT)	[thread overview]
Message-ID: <> (raw)

commit r13-2642-g94504c9ae157db937a2e62d533a36d56598f3c09
Author: Kewen.Lin <>
Date:   Tue Sep 13 04:13:59 2022 -0500

    rs6000: Handle unresolved overloaded builtin [PR105485]
    PR105485 exposes that new builtin function framework doesn't handle
    unresolved overloaded builtin function well.  With new builtin
    function support, we don't have builtin info for any overloaded
    rs6000_gen_builtins enum, since they are expected to be resolved to
    one specific instance.  So when function rs6000_gimple_fold_builtin
    faces one unresolved overloaded builtin, the access for builtin info
    becomes out of bound and gets ICE then.
    We should not try to fold one unresolved overloaded builtin there
    and as the previous support we should emit one error message during
    expansion phase like "unresolved overload for builtin ...".
            PR target/105485
            * config/rs6000/ (rs6000_gimple_fold_builtin): Add
            the handling for unresolved overloaded builtin function.
            (rs6000_expand_builtin): Likewise.
            * New test.

 gcc/config/rs6000/         | 13 +++++++++++++
 gcc/testsuite/ |  9 +++++++++
 2 files changed, 22 insertions(+)

diff --git a/gcc/config/rs6000/ b/gcc/config/rs6000/
index 6dfb0db43d6..3ce729c1e6d 100644
--- a/gcc/config/rs6000/
+++ b/gcc/config/rs6000/
@@ -1260,6 +1260,11 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)
   enum tree_code bcode;
   gimple *g;
+  /* For an unresolved overloaded builtin, return early here since there
+     is no builtin info for it and we are unable to fold it.  */
+  if (fn_code > RS6000_OVLD_NONE)
+    return false;
   size_t uns_fncode = (size_t) fn_code;
   enum insn_code icode = rs6000_builtin_info[uns_fncode].icode;
   const char *fn_name1 = rs6000_builtin_info[uns_fncode].bifname;
@@ -3256,6 +3261,14 @@ rs6000_expand_builtin (tree exp, rtx target, rtx /* subtarget */,
   tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
   enum rs6000_gen_builtins fcode
     = (enum rs6000_gen_builtins) DECL_MD_FUNCTION_CODE (fndecl);
+  /* Emit error message if it's an unresolved overloaded builtin.  */
+  if (fcode > RS6000_OVLD_NONE)
+    {
+      error ("unresolved overload for builtin %qF", fndecl);
+      return const0_rtx;
+    }
   size_t uns_fcode = (size_t)fcode;
   enum insn_code icode = rs6000_builtin_info[uns_fcode].icode;
diff --git a/gcc/testsuite/ b/gcc/testsuite/
new file mode 100644
index 00000000000..db1bd944aae
--- /dev/null
+++ b/gcc/testsuite/
@@ -0,0 +1,9 @@
+/* It's to verify no ICE here, ignore error/warning messages
+   since they are not test points here.  */
+/* { dg-excess-errors "pr105485" } */
+template <class> void __builtin_vec_vslv();
+typedef  __attribute__((altivec(vector__))) char T;
+T b (T c, T d) {
+    return __builtin_vec_vslv(c, d);

                 reply	other threads:[~2022-09-13 10:40 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).