This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[C PATCH] Fix ICE-on-invalid with old-style-parameter-declaration and __func__ (PR c/71265)
- From: Marek Polacek <polacek at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, Joseph Myers <joseph at codesourcery dot com>
- Date: Wed, 25 May 2016 16:01:28 +0200
- Subject: [C PATCH] Fix ICE-on-invalid with old-style-parameter-declaration and __func__ (PR c/71265)
- Authentication-results: sourceware.org; auth=none
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 <polacek@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