* c-decl.c (store_parm_decls): When comparing types in an
old-style function declaration with those from a previous
prototype, compare the unqualified versions of parameter types.
Fixes PR c/3116.
testsuite:
* gcc.c-torture/compile/
20010611-1.c: New test.
From-SVN: r43186
+2001-06-11 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * c-decl.c (store_parm_decls): When comparing types in an
+ old-style function declaration with those from a previous
+ prototype, compare the unqualified versions of parameter types.
+ Fixes PR c/3116.
+
2001-06-11 Joseph S. Myers <jsm28@cam.ac.uk>
* doc/objc.texi: Use more logical markup. Use TeX dashes.
"prototype declaration");
break;
}
- /* Type for passing arg must be consistent
- with that declared for the arg. */
- if (! comptypes (DECL_ARG_TYPE (parm), TREE_VALUE (type)))
+ /* Type for passing arg must be consistent with that
+ declared for the arg. ISO C says we take the unqualified
+ type for parameters declared with qualified type. */
+ if (! comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
+ TYPE_MAIN_VARIANT (TREE_VALUE (type))))
{
if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
== TYPE_MAIN_VARIANT (TREE_VALUE (type)))
+2001-06-11 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gcc.c-torture/compile/20010611-1.c: New test.
+
2001-06-11 Joseph S. Myers <jsm28@cam.ac.uk>
* gcc.dg/c99-tag-1.c: Add more tests.
--- /dev/null
+/* Origin: PR c/3116 from Andreas Jaeger <aj@suse.de>. */
+/* When determining type compatibility of function types, we must remove
+ qualifiers from argument types. We used to fail to do this properly
+ in store_parm_decls when comparing prototype and non-prototype
+ declarations. */
+struct _IO_FILE {
+ int _flags;
+};
+
+typedef struct _IO_FILE __FILE;
+typedef struct _IO_FILE _IO_FILE;
+typedef long int wchar_t;
+
+extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
+ __FILE *__restrict __stream);
+
+wchar_t *
+fgetws (buf, n, fp)
+ wchar_t *buf;
+ int n;
+ _IO_FILE *fp;
+{
+ return (wchar_t *)0;
+}