From c9980711ce42de9cf58db35f41ce1ac42bfea0c7 Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Sun, 10 Aug 2025 04:46:09 -0400 Subject: fix peephole bug (communative(phi(a,b), phi(a,b)) =/= communative(a,b)) --- main.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index ae19e7a..fa00bad 100644 --- a/main.c +++ b/main.c @@ -161,9 +161,13 @@ void parse_assign(Lexer *l, Proc *p) { type_desc(&e->type, &p->arena), type_desc(&b->node->type, &p->arena))); } - if (e->op == N_UNINIT) { + if (node_uninit(e)) { lex_error_at(l, e->src_pos, LE_ERROR, - str_fmt(&p->arena, "assigning from uninitialized %S value", + str_fmt(&p->arena, "uninitialized %S", + type_desc(&e->type, &p->arena))); + } else if (node_maybe_uninit(e)) { + lex_error_at(l, e->src_pos, LE_WARN, + str_fmt(&p->arena, "possibly uninitialized %S", type_desc(&e->type, &p->arena))); } scope_update(b, e, p); @@ -659,6 +663,9 @@ void node_print(Node *n, Proc *p) { } else if (n->op == N_PROJ) { Str d = type_desc(&n->in.data[0]->val.tuple.data[n->val.i].type, &p->arena); printf("\t%d [label=\"%.*s(%ld)\", shape=record]", n->id, (int)d.n, d.s, n->val.i); + } else if (n->op == N_UNINIT) { + Str s = type_desc(&n->type, &p->arena); + printf("\t%d [label=\"uninitialized %.*s\", shape=record]", n->id, (int)s.n, s.s); } else { printf("\t%d [label=\"%s\", shape=record]", n->id, node_type_name(n->op)); } -- cgit v1.2.3