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?

2016-05-25  Marek Polacek  <pola...@redhat.com>

        PR c/71265
        * c-decl.c (c_make_fname_decl): Don't check seen_error.

        * gcc.dg/noncompile/pr71265.c: New test.

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" } 
*/
+{
+}

        Marek

Reply via email to