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