Fixed function declarator parser when a parameter has a function type.

Ensured check on parameter lists without types in non-definition declarations.
This commit is contained in:
acqn
2023-12-14 02:34:03 +08:00
parent 05aae60816
commit 1e4d1b4311
4 changed files with 100 additions and 33 deletions

1
test/err/bug2303.c Normal file
View File

@@ -0,0 +1 @@
int f(a); /* Should be an error */

32
test/val/bug2302.c Normal file
View File

@@ -0,0 +1,32 @@
/* Bug #2302 - Parameters of function types not parsed correctly */
#include <stdio.h>
typedef int A;
int zoo(A ()); /* OK: int zoo(int (*)()) */
int zoo(A (())); /* OK: int zoo(int ((*)())) aka. int zoo(int (*)()) */
int zoo(A (A)); /* OK: int zoo(int (*)(int)) */
int zoo(A ((A))); /* OK: int zoo(int ((*)(int))) aka. int zoo(int (*)(int)) */
int zoo(A A(A)); /* OK: int zoo(int (*A)(int)) */
int zoo(A (*)(A)); /* OK: int zoo(int (*)(int)) */
int zoo(A (*A)(A)); /* OK: int zoo(int (*A)(int)) */
int zoo(A ((*A))(A)); /* OK: int zoo(int (*A)(int)) */
int zoo(A ((((*((fp))))(A A)))) /* OK: int zoo(int (*fp)(int A)) */
{
return fp(42);
}
int bar(int a)
{
return a ^ 42;
}
int main(void)
{
int a = zoo((int (*)())bar);
if (a != 0)
{
printf("failed: a = %d\n", a);
}
return a;
}