commit 396214b995f7cee9b41f1d2038dd59e79d8c1a07
parent 0e80961769b914c539ffb502ea6be3cb3130fc8c
Author: Ryan Sepassi <rsepassi@gmail.com>
Date: Tue, 19 May 2026 16:55:14 -0700
Fix parser CAS type stack
Diffstat:
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/lang/c/parse/cg_adapter.c b/lang/c/parse/cg_adapter.c
@@ -576,12 +576,16 @@ void pcg_atomic_rmw(Parser* p, AtomicOp op, MemOrder ord) {
}
void pcg_atomic_cas(Parser* p, MemOrder succ, MemOrder fail) {
- const Type* ty = pcg_top_type(p);
+ const Type* ty = pcg_top2_type(p);
if (pcg_emit_enabled(p)) {
cfree_cg_atomic_cmpxchg(p->cg, pcg_mem(p, ty), pcg_mem_order(succ),
pcg_mem_order(fail), 0);
}
- pcg_retag_top(p, type_prim(p->pool, TY_BOOL));
+ pcg_drop_type(p); /* desired */
+ pcg_drop_type(p); /* expected */
+ pcg_drop_type(p); /* pointer */
+ pcg_push_type(p, ty);
+ pcg_push_type(p, type_prim(p->pool, TY_BOOL));
}
void pcg_fence(Parser* p, MemOrder ord) {