OK.

On Fri, Apr 6, 2018 at 11:44 AM, Jakub Jelinek <ja...@redhat.com> wrote:
> Hi!
>
> During parsing we report error here, the decomp id shadowing parameter,
> but we still have a VAR_DECL for the decomp id, only during
> tsubst_decomp_names tsubst returns a PARM_DECL for it.
>
> I believe and (the code asserts that) this can only happen during error
> recovery and we just should punt on it, we don't want to pushdecl it, nor
> try to create lds_decomp DECL_LANG_SPECIFIC for it (PARM_DECLs have
> lds_parm, so that is where we ICE on this testcase), etc.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2018-04-06  Jakub Jelinek  <ja...@redhat.com>
>
>         PR c++/85210
>         * pt.c (tsubst_decomp_names): Return error_mark_node and assert
>         errorcount is set if tsubst doesn't return a VAR_DECL.
>
>         * g++.dg/cpp1z/decomp42.C: New test.
>
> --- gcc/cp/pt.c.jj      2018-04-05 23:30:11.315435539 +0200
> +++ gcc/cp/pt.c 2018-04-06 11:46:34.170154030 +0200
> @@ -16235,6 +16235,12 @@ tsubst_decomp_names (tree decl, tree pat
>        DECL_HAS_VALUE_EXPR_P (decl2) = 1;
>        if (VAR_P (decl3))
>         DECL_TEMPLATE_INSTANTIATED (decl3) = 1;
> +      else
> +       {
> +         gcc_assert (errorcount);
> +         decl = error_mark_node;
> +         continue;
> +       }
>        maybe_push_decl (decl3);
>        if (error_operand_p (decl3))
>         decl = error_mark_node;
> --- gcc/testsuite/g++.dg/cpp1z/decomp42.C.jj    2018-04-06 11:45:39.724162398 
> +0200
> +++ gcc/testsuite/g++.dg/cpp1z/decomp42.C       2018-04-06 11:45:39.724162398 
> +0200
> @@ -0,0 +1,18 @@
> +// PR c++/85210
> +// { dg-do compile { target c++11 } }
> +// { dg-options "" }
> +
> +struct A { int i; };
> +
> +template <int>
> +void
> +foo (int j)
> +{
> +  auto [j] = A{j};     // { dg-error "shadows a parameter" }
> +}                      // { dg-warning "structured bindings only available 
> with" "" { target c++14_down } .-1 }
> +
> +void
> +bar ()
> +{
> +  foo<0> (0);
> +}
>
>         Jakub

Reply via email to