From 42ce457bba06bd3607fc04700a919b6c395f22c3 Mon Sep 17 00:00:00 2001 From: lemon Date: Sat, 14 Mar 2026 17:27:37 +0100 Subject: c: static eval refactoring Explicit node for static symbol (addresses). Should not break with edge cases like the previous ad-hoc approach. And some other bugfixes --- ir/ir.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'ir/ir.c') diff --git a/ir/ir.c b/ir/ir.c index bb75d4b..626311e 100644 --- a/ir/ir.c +++ b/ir/ir.c @@ -159,10 +159,12 @@ mksymref(internstr s, enum symflags symflags) } union ref -mkdatref(internstr name, union type ctype, uint siz, uint align, const void *bytes, uint n, bool deref) +mkdatref(internstr name, union type ctype, uint siz, uint align, + const void *bytes, uint n, bool deref, bool funclocal) { - struct irdat dat = { .ctype = ctype, .align = align, .siz = siz, .name = name }; - dat.section = objout.code && align >= 4 && align <= targ_primsizes[TYPTR] && siz <= 16 ? Stext : Srodata; + struct irdat dat = { .ctype = ctype, .align = align, .siz = siz, .name = name, .section = Srodata }; + if (funclocal && objout.code && align >= 4 && align <= targ_primsizes[TYPTR] && siz <= 16) + dat.section = Stext; assert(n <= siz && siz && align); if (!name) { -- cgit v1.2.3