OSDN Git Service

PR c/18239
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Nov 2004 19:49:55 +0000 (19:49 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Nov 2004 19:49:55 +0000 (19:49 +0000)
* c-decl.c (get_parm_info): Allow FUNCTION_DECLs to appear amongst
parameter declarations.

testsuite:
* gcc.dg/parm-impl-decl-1.c, gcc.dg/parm-impl-decl-2.c: New tests.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89956 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/parm-impl-decl-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/parm-impl-decl-2.c [new file with mode: 0644]

index 84ca204..eacc393 100644 (file)
@@ -1,3 +1,9 @@
+2004-11-01  Joseph S. Myers  <joseph@codesourcery.com>
+
+       PR c/18239
+       * c-decl.c (get_parm_info): Allow FUNCTION_DECLs to appear amongst
+       parameter declarations.
+
 2004-11-01  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * config/s390/s390.c (regclass_map): Put reg 33 (cc) to CC_REGS group.
index 839b5f3..ba4249a 100644 (file)
@@ -4855,10 +4855,13 @@ get_parm_info (bool ellipsis)
 
        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.  */
+            type itself.  FUNCTION_DECLs appear when there is an implicit
+            function declaration in the parameter list.  */
+
          TREE_CHAIN (decl) = others;
          others = decl;
          /* fall through */
@@ -4875,7 +4878,6 @@ get_parm_info (bool ellipsis)
 
          /* Other things that might be encountered.  */
        case LABEL_DECL:
-       case FUNCTION_DECL:
        case VAR_DECL:
        default:
          gcc_unreachable ();
index 3b08af5..b4746bc 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-01  Joseph S. Myers  <joseph@codesourcery.com>
+
+       PR c/18239
+       * gcc.dg/parm-impl-decl-1.c, gcc.dg/parm-impl-decl-2.c: New tests.
+
 2004-11-01  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/18064
diff --git a/gcc/testsuite/gcc.dg/parm-impl-decl-1.c b/gcc/testsuite/gcc.dg/parm-impl-decl-1.c
new file mode 100644 (file)
index 0000000..1e45d3b
--- /dev/null
@@ -0,0 +1,33 @@
+/* Test implicit function declarations and other odd declarations in
+   function prototypes.  Bug 18239.  */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+/* Implicit function declaration in attribute in definition (testcase
+   from bug).  */
+int
+foo (int __attribute__ ((__mode__ (vector_size(8)))) i) /* { dg-warning "warning: '__mode__' attribute ignored" } */
+{
+  return (long long) i;
+}
+
+/* Various other cases.  */
+
+int f (int [sizeof(g())]);
+int f1 (int [sizeof(g1())]);
+
+int g () { return 1; }
+
+int
+h (int (*p)[sizeof(i())])
+{
+  int g2 (), g3 ();
+  return (*p)[0] + g3() + g2();
+}
+
+int i () { return 2; }
+
+int f2 (int [sizeof(g2())]);
+int f3 (int [sizeof(g3())]);
+int g3 () { return 4; }
diff --git a/gcc/testsuite/gcc.dg/parm-impl-decl-2.c b/gcc/testsuite/gcc.dg/parm-impl-decl-2.c
new file mode 100644 (file)
index 0000000..1f46300
--- /dev/null
@@ -0,0 +1,7 @@
+/* Test implicit function declarations and other odd declarations in
+   function prototypes.  Make sure that LABEL_DECLs don't occur.  */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int k (int [sizeof &&z]); /* { dg-error "error: label 'z' referenced outside of any function" } */