+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.
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 */
/* Other things that might be encountered. */
case LABEL_DECL:
- case FUNCTION_DECL:
case VAR_DECL:
default:
gcc_unreachable ();
+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
--- /dev/null
+/* 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; }
--- /dev/null
+/* 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" } */