[PATCH] c++: Diagnose bare parameter packs in bitfield widths [PR99745]

Jason Merrill jason@redhat.com
Thu Mar 25 20:00:01 GMT 2021


On 3/25/21 6:52 AM, Jakub Jelinek wrote:
> Hi!
> 
> The following invalid tests ICE because we don't diagnose (and drop) bare
> parameter packs in bitfield widths.
> 
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
> trunk?

OK.

> 2021-03-24  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR c++/99745
> 	* decl2.c (grokbitfield): Diagnose bitfields containing bare parameter
> 	packs and don't set DECL_BIT_FIELD_REPRESENTATIVE in that case.
> 
> 	* g++.dg/cpp0x/variadic181.C: New test.
> 
> --- gcc/cp/decl2.c.jj	2021-03-23 16:14:01.765300278 +0100
> +++ gcc/cp/decl2.c	2021-03-24 16:30:30.635890413 +0100
> @@ -1117,7 +1117,7 @@ grokbitfield (const cp_declarator *decla
>   	  && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (width)))
>   	error ("width of bit-field %qD has non-integral type %qT", value,
>   	       TREE_TYPE (width));
> -      else
> +      else if (!check_for_bare_parameter_packs (width))
>   	{
>   	  /* Temporarily stash the width in DECL_BIT_FIELD_REPRESENTATIVE.
>   	     check_bitfield_decl picks it from there later and sets DECL_SIZE
> --- gcc/testsuite/g++.dg/cpp0x/variadic181.C.jj	2021-03-24 16:40:38.063294626 +0100
> +++ gcc/testsuite/g++.dg/cpp0x/variadic181.C	2021-03-24 16:42:46.494901686 +0100
> @@ -0,0 +1,9 @@
> +// PR c++/99745
> +// { dg-do compile { target c++11 } }
> +
> +template <typename... Ts>
> +struct S { int a : sizeof(Ts); };	// { dg-error "parameter packs not expanded with '\.\.\.':" }
> +S<int> s;				// { dg-message "'Ts'" "" { target *-*-* } .-1 }
> +template <int... Ns>
> +struct T { int a : Ns; };		// { dg-error "parameter packs not expanded with '\.\.\.':" }
> +T<0> t;					// { dg-message "'Ns'" "" { target *-*-* } .-1 }
> 
> 	Jakub
> 



More information about the Gcc-patches mailing list