[PATCH] rs6000: Small improvement to the C++17 ABI fix [PR94707]

Segher Boessenkool segher@kernel.crashing.org
Thu Apr 23 12:26:47 GMT 2020


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  <jakub@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


More information about the Gcc-patches mailing list