diff options
| author | WormHeamer | 2025-08-10 04:46:09 -0400 |
|---|---|---|
| committer | WormHeamer | 2025-08-10 04:46:09 -0400 |
| commit | c9980711ce42de9cf58db35f41ce1ac42bfea0c7 (patch) | |
| tree | caa99c741b012f5fc683f131c6c2281fec4e2f61 /main.c | |
| parent | d4c768a481b923d407201c25d3d750040b6ccd44 (diff) | |
fix peephole bug (communative(phi(a,b), phi(a,b)) =/= communative(a,b))
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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)); } |
