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:
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