aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/parse.c')
-rw-r--r--bootstrap/parse.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/bootstrap/parse.c b/bootstrap/parse.c
index 3233e84..f61e65b 100644
--- a/bootstrap/parse.c
+++ b/bootstrap/parse.c
@@ -1542,7 +1542,7 @@ typedef void (*decl_yielder_t)(struct decl *, void *);
static void parsedecl(decl_yielder_t, void *, struct parser *, bool toplevel);
static void
-parsevardecl(decl_yielder_t yield, void *yarg, struct parser *P) {
+parsevardecl(decl_yielder_t yield, void *yarg, struct parser *P, bool let, bool externp) {
struct tok tok;
do {
@@ -1595,9 +1595,9 @@ parsevardecl(decl_yielder_t yield, void *yarg, struct parser *P) {
ty = interntype(ty2);
}
- if (!completetype(ty))
- fatal(P, tok.span, "let `%s': variable type %t is incomplete",
- name, ty);
+ if (!completetype(ty) && !(!let && externp))
+ fatal(P, tok.span, "%s `%s': variable type %t is incomplete",
+ let ? "let" : "static", name, ty);
if (konst)
ty = constify(ty);
@@ -1641,7 +1641,7 @@ pstlet(stmt_yielder_t yield, void *yarg, struct parser *P) {
struct letstmtyarg arg = {
P, yarg, yield
};
- parsevardecl(letstmtyield, &arg, P);
+ parsevardecl(letstmtyield, &arg, P, 1, 0);
}
static struct stmt
@@ -2427,7 +2427,7 @@ parsedecl(decl_yielder_t yield, void *yarg, struct parser *P, bool toplevel) {
} else if (lexmatch(P, &tok, TKkw_static)) {
parsevardecl(staticvaryield, &(struct staticvaryarg) {
P, externp, toplevel, tok.span, yield, yarg
- }, P);
+ }, P, 0, externp);
return;
} else if (lexmatch(P, &tok, TKkw_typedef)) {
if (externp) fatal(P, tok.span, "typedef cannot be `extern'");