re PR c/69824 (internal compiler error in unshare_body)

PR c/69824
	* c-decl.c (get_parm_info): Don't queue implicit function declarations
	for later.

	PR c/69824
	* gcc.dg/pr69824.c: New test.

From-SVN: r234000
This commit is contained in:
Bernd Schmidt 2016-03-04 22:22:01 -07:00 committed by Jeff Law
parent 5c03c4211d
commit 29b9828fa4
4 changed files with 24 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
PR c/69824
* c-decl.c (get_parm_info): Don't queue implicit function declarations
for later.
2016-03-04 Marek Polacek <polacek@redhat.com>
PR c/69798

View file

@ -7050,25 +7050,28 @@ get_parm_info (bool ellipsis, tree expr)
vec_safe_push (tags, tag);
break;
case FUNCTION_DECL:
/* FUNCTION_DECLs appear when there is an implicit function
declaration in the parameter list. */
gcc_assert (b->nested);
goto set_shadowed;
case CONST_DECL:
case TYPE_DECL:
case FUNCTION_DECL:
/* CONST_DECLs appear here when we have an embedded enum,
and TYPE_DECLs appear here when we have an embedded struct
or union. No warnings for this - we already warned about the
type itself. FUNCTION_DECLs appear when there is an implicit
function declaration in the parameter list. */
type itself. */
/* When we reinsert this decl in the function body, we need
to reconstruct whether it was marked as nested. */
gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
? b->nested
: !b->nested);
gcc_assert (!b->nested);
DECL_CHAIN (decl) = others;
others = decl;
/* fall through */
case ERROR_MARK:
set_shadowed:
/* error_mark_node appears here when we have an undeclared
variable. Just throw it away. */
if (b->id)

View file

@ -1,3 +1,8 @@
2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
PR c/69824
* gcc.dg/pr69824.c: New test.
2016-03-05 Tom de Vries <tom@codesourcery.com>
* c-c++-common/goacc/nesting-fail-1.c (f_acc_routine): New function.

View file

@ -0,0 +1,4 @@
/* { dg-do compile } */
/* { dg-options "-w" } */
int bar() { return foo(); }
void baz(int c[foo()]) { return; }