]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c/69824 (internal compiler error in unshare_body)
authorBernd Schmidt <bernds@redhat.com>
Sat, 5 Mar 2016 05:22:01 +0000 (22:22 -0700)
committerJeff Law <law@gcc.gnu.org>
Sat, 5 Mar 2016 05:22:01 +0000 (22:22 -0700)
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

gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr69824.c [new file with mode: 0644]

index 1fe4f820c856f220763f98f18cd75b21c255b9a6..2e54e5657e4014b242d76bfff148e92874f41774 100644 (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
index 298036a4eec26d3a7c70628b09a4d3ea570a4710..bab471532354151019c6c4e8fb0700634412a005 100644 (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)
index 51469eaee8111628f2254b23e324a5787a041c1a..3fb4fe1b6bcf4caa271d687294dfe91d90e409cc 100644 (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.
diff --git a/gcc/testsuite/gcc.dg/pr69824.c b/gcc/testsuite/gcc.dg/pr69824.c
new file mode 100644 (file)
index 0000000..e2913f8
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+int bar() { return foo(); }
+void baz(int c[foo()]) { return; }