On Thu, Apr 23, 2020 at 01:48:00PM +0200, Jakub Jelinek wrote: > 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.
No, it used the same ABI then as well, but with a buggy implementation :-) The ABI is not determined by GCC. > 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; That looks fine, please go ahead. Thanks :-) Segher