On Mon, Jun 22, 2020 at 09:42:51PM -0400, Nicholas Krause via Gcc-patches wrote:
> From: Nicholas Krause <xerofo...@gmail.com>
> 
> This fixs the PR95672 by adding the missing TYPE_PACK_EXPANSION case in
> cxx_incomplete_type_diagnostic in order to avoid ICES on diagnosing
> incomplete template pack expansion cases. In v2, add the missing required
> test case for all new patches. v3 Fixes both the test case to compile in
> C++11 mode and the message to print out only the type. v4 fixes the testcase
> to only target C++11. v5 and v6 fix the test case properly.
> 
> gcc/cp/ChangeLog:
> 
>       * typeck2.c (cxx_incomplete_type_diagnostic): Add missing 
> TYPE_EXPANSION_PACK
>         check for diagnosticing incomplete types in 
> cxx_incomplete_type_diagnostic.

It's already been pointed out to you that it's "diagnosing".

> gcc/testsuite/ChangeLog:
> 
>       * g++.dg/template/PR95672.C: New test.
> 
> Signed-off-by: Nicholas Krause <xerofo...@gmail.com>
> ---
>  gcc/cp/typeck2.c                        | 6 ++++++
>  gcc/testsuite/g++.dg/template/PR95672.C | 3 +++
>  2 files changed, 9 insertions(+)
>  create mode 100644 gcc/testsuite/g++.dg/template/PR95672.C
> 
> diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
> index 5fd3b82fa89..28b32fe0b5a 100644
> --- a/gcc/cp/typeck2.c
> +++ b/gcc/cp/typeck2.c
> @@ -552,6 +552,12 @@ cxx_incomplete_type_diagnostic (location_t loc, 
> const_tree value,
>                      TYPE_NAME (type));
>        break;
>  
> +    case TYPE_PACK_EXPANSION:
> +     emit_diagnostic (diag_kind, loc, 0,

Bad indenting.

> +                  "invalid use of pack expansion %qT",
> +                   type);
> +      break;
> +
>      case TYPENAME_TYPE:
>      case DECLTYPE_TYPE:
>        emit_diagnostic (diag_kind, loc, 0,
> diff --git a/gcc/testsuite/g++.dg/template/PR95672.C 
> b/gcc/testsuite/g++.dg/template/PR95672.C
> new file mode 100644
> index 00000000000..fcc3da0a132
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/template/PR95672.C
> @@ -0,0 +1,3 @@
> +// PR c++/96572 
> +// { dg-do compile}
> +// { dg-options "-std=c++11" }
> +struct g_class : decltype  (auto) ... {  }; // { dg-error "invalid use of 
> pack expansion" }

No, this is completely broken.  It passes only because the patch file is
malformed and the last line will be lost when applying the patch, so the
test is an empty file.

Marek

Reply via email to