From e77538515802276d76dfcb28c9b8dc140d5afe02 Mon Sep 17 00:00:00 2001 From: lemon Date: Tue, 30 Dec 2025 10:34:11 +0100 Subject: c: SYM expr should store decl ref as an index, not pointer Because envdecls (now declsbuf) can be resized and invalidate those pointers. I missed this because the default initialization size of that buffer (and the fact that it would mostly only manifest with function-local expressions) made it not really come up in practice. Silly --- c/eval.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'c/eval.c') diff --git a/c/eval.c b/c/eval.c index 746bc64..d227c91 100644 --- a/c/eval.c +++ b/c/eval.c @@ -158,7 +158,7 @@ unop(struct expr *ex, enum evalmode mode) static bool isglobsym(const struct expr *ex) { - return ex->t == ESTRLIT || (ex->t == ESYM && ex->sym && (ex->sym->scls & (SCSTATIC | SCEXTERN))); + return ex->t == ESTRLIT || (ex->t == ESYM && ex->ty.t < NTYPETAG && (declsbuf.p[ex->decl].scls & (SCSTATIC | SCEXTERN))); } static bool -- cgit v1.2.3