On Thu, Apr 23, 2020 at 05:24:19AM -0500, Segher Boessenkool wrote:
> > +                 inform (input_location,
> > +                         "parameter passing for argument of type %qT "
> > +                         "when C++17 is enabled changed to match C++14 "
> > +                         "in GCC 10.1", type);
> 
> It isn't "to match C++14".  It simply is a bugfix, we didn't follow
> the ABI before :-)

The reason for the exact wording was to make it clearer to the user
that C++17 doesn't have a different ABI from C++14 now, but it had in the
older releases.

Anyway, based on IRC discussion with Richard Sandiford on IRC, we should
probably test type uids instead of type pointers because type uids aren't
reused, but type pointers in a very bad luck case could be, and having the
static var at filescope and GTY((deletable)) is an overkill (and with costs
during GC time).

Ok if it passes bootstrap/regtest?

2020-04-23  Jakub Jelinek  <ja...@redhat.com>

        PR target/94707
        * config/rs6000/rs6000-call.c (rs6000_discover_homogeneous_aggregate):
        Use TYPE_UID (TYPE_MAIN_VARIANT (type)) instead of type to check
        if the same type has been diagnosed most recently already.

--- gcc/config/rs6000/rs6000-call.c.jj  2020-04-23 09:59:12.002172006 +0200
+++ gcc/config/rs6000/rs6000-call.c     2020-04-23 13:42:10.037745872 +0200
@@ -5739,14 +5739,15 @@ rs6000_discover_homogeneous_aggregate (m
                *n_elts = field_count;
              if (cxx17_empty_base_seen && warn_psabi)
                {
-                 static const_tree last_reported_type;
-                 if (type != last_reported_type)
+                 static unsigned last_reported_type_uid;
+                 unsigned uid = TYPE_UID (TYPE_MAIN_VARIANT (type));
+                 if (uid != last_reported_type_uid)
                    {
                      inform (input_location,
                              "parameter passing for argument of type %qT "
                              "when C++17 is enabled changed to match C++14 "
                              "in GCC 10.1", type);
-                     last_reported_type = type;
+                     last_reported_type_uid = uid;
                    }
                }
              return true;


        Jakub

Reply via email to