Message ID | 20160525140127.GD17920@redhat.com |
---|---|
State | New |
Headers | show |
On Wed, 25 May 2016, Marek Polacek wrote: > Another ICE on invalid with old-style-parameter-declaration, this time with > __func__. The problem is in c_make_fname_decl: > > if (current_function_decl > && (!seen_error () || current_function_scope)) > bind (..., current_function_scope, ...) > > The condition is wrong; if current_function_scope is null then we must not call > bind, otherwise we segv. That's what happens here because seen_error () is 0 > at that point. The seen_error() check doesn't make sense to me here, so I > suggest removing it, so that we never call bind() here with a null scope. > > Bootstrapped/regtested on x86_64-linux, ok for trunk? OK.
diff --git gcc/c/c-decl.c gcc/c/c-decl.c index 9441fbb..d7c3783 100644 --- gcc/c/c-decl.c +++ gcc/c/c-decl.c @@ -3989,7 +3989,7 @@ c_make_fname_decl (location_t loc, tree id, int type_dep) the __FUNCTION__ is believed to appear in K&R style function parameter declarator. In that case we still don't have function_scope. */ - && (!seen_error () || current_function_scope)) + && current_function_scope) { DECL_CONTEXT (decl) = current_function_decl; bind (id, decl, current_function_scope, diff --git gcc/testsuite/gcc.dg/noncompile/pr71265.c gcc/testsuite/gcc.dg/noncompile/pr71265.c index e69de29..9c62aab 100644 --- gcc/testsuite/gcc.dg/noncompile/pr71265.c +++ gcc/testsuite/gcc.dg/noncompile/pr71265.c @@ -0,0 +1,7 @@ +/* PR c/71265 */ +/* { dg-do compile } */ + +void ID (ID) + int ID [__func__]; /* { dg-error "size of array .ID. has non-integer type" } */ +{ +}