qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit 2ec355df6adc457303fcf2076b559fefd80ee593
parent 7ee9970b32a07a62c625c6ae048366ed0c0b0ce4
Author: Quentin Carbonneaux <quentin@c9x.me>
Date:   Mon, 12 Dec 2022 16:55:03 +0100

crash loads from uninitialized slots

Diffstat:
Mmem.c | 11+++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/mem.c b/mem.c @@ -304,12 +304,19 @@ coalesce(Fn *fn) for (u=t->use; u<&t->use[t->nuse]; u++) { assert(u->type == UIns); i = u->u.ins; - if (!req(i->to, R)) { + /* make loads crash */ + if (isload(i->op)) + i->arg[0] = CON_Z; + else if (i->op == Oargc) + i->arg[1] = CON_Z; + else if (!req(i->to, R)) { assert(rtype(i->to) == RTmp); vgrow(&stk, ++n); stk[n-1] = i->to.val; - } else + } else { + assert(!isarg(i->op)); *i = (Ins){.op = Onop}; + } } } vfree(stk);