ref: 079e6ba6e4a218a64d593894050f546ca5cd3d34
parent: 52ef3bfb727b3f197caf482fbd151a062fa34c70
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Wed Jun 15 17:48:25 EDT 2022
cc1: Improve errors in typedef'ed function types If a typedef function type is used to define a function we should give a clear error messae and try to don't break any assumption that the code does.
--- a/src/cmd/cc/cc1/decl.c
+++ b/src/cmd/cc/cc1/decl.c
@@ -1,3 +1,4 @@
+#include <assert.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
@@ -505,8 +506,16 @@
case TYPE:
case SCLASS:
case TYPEIDEN:
+ if (curctx < PARAMCTX) {
+ assert(!pars);
+ errorp("typedef'ed function type cannot be instantiated");
+ curctx = PARAMCTX;
+ pars = (Symbol *[]) {NULL};
+ }
+
if (curctx != PARAMCTX)
errorp("nested function declaration");
+
if (sym && sym->ns == NS_IDEN)
break;
default: