Hi,

As shown in PR104967, for some overload built-in function instance,
if it requires a date type which isn't defined on the target, its
fntype would be initialized as NULL.  This patch is to consider
this possibility in function find_instance to avoid ICE.

Bootstrapped and regtested on powerpc64-linux-gnu P8 and
powerpc64le-linux-gnu P9 and P10.

Is it ok for trunk?

BR,
Kewen

        PR target/104967

gcc/ChangeLog:

        * config/rs6000/rs6000-c.cc (find_instance): Skip instances with null
        function types.

---
 gcc/config/rs6000/rs6000-c.cc | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 15251efc209..b0f9fce4b54 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -1678,6 +1678,10 @@ find_instance (bool *unsupported_builtin, ovlddata 
**instance,

   ovlddata *inst = *instance;
   gcc_assert (inst != NULL);
+  /* It is possible for an instance to require a data type that isn't
+     defined on this target, in which case inst->fntype will be NULL.  */
+  if (!inst->fntype)
+    return error_mark_node;
   tree fntype = rs6000_builtin_info[inst->bifid].fntype;
   tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
   tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
--
2.25.1

Reply via email to