kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

commit 072394f859acc74b486339b35670f2d350322249
parent 55f70c4d9fb4303165e20806c82894de002ad621
Author: Ryan Sepassi <rsepassi@gmail.com>
Date:   Tue, 19 May 2026 23:14:23 -0700

Preserve null constants through suppressed loads

Diffstat:
Mlang/c/parse/cg_adapter.c | 3++-
Atest/parse/cases/6_5_9_01_suppressed_null_ptr_cmp.c | 8++++++++
Atest/parse/cases/6_5_9_01_suppressed_null_ptr_cmp.expected | 1+
3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/lang/c/parse/cg_adapter.c b/lang/c/parse/cg_adapter.c @@ -371,8 +371,9 @@ void pcg_push_global(Parser* p, ObjSymId sym, const Type* ty) { } void pcg_load(Parser* p) { + int was_lvalue = pcg_top_is_lvalue(p); if (pcg_emit_enabled(p)) cfree_cg_load(p->cg, pcg_mem(p, pcg_top_type(p))); - if (p->cg_type_sp) p->cg_value_flags[p->cg_type_sp - 1u] = 0; + if (was_lvalue && p->cg_type_sp) p->cg_value_flags[p->cg_type_sp - 1u] = 0; } void pcg_addr(Parser* p) { diff --git a/test/parse/cases/6_5_9_01_suppressed_null_ptr_cmp.c b/test/parse/cases/6_5_9_01_suppressed_null_ptr_cmp.c @@ -0,0 +1,8 @@ +int test_main(void) { + int x = 0; + int *p = &x; + if (0) { + if (p == 0) return 1; + } + return 7; +} diff --git a/test/parse/cases/6_5_9_01_suppressed_null_ptr_cmp.expected b/test/parse/cases/6_5_9_01_suppressed_null_ptr_cmp.expected @@ -0,0 +1 @@ +7