From 2873e323c76c58b7d5b50c6c3edc45e81bf54003 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 19 Aug 2026 14:52:35 +0100 Subject: [PATCH] Fix `#align_stack` redundancy checks --- src/check_asm.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/check_asm.cpp b/src/check_asm.cpp index bcf0d6e14..c44910af2 100644 --- a/src/check_asm.cpp +++ b/src/check_asm.cpp @@ -1074,8 +1074,12 @@ gb_internal void check_mnemonic(AsmCtx *asm_ctx, CheckerContext *ctx, Entity *tm tmpl_entity->AsmTemplate.has_observable_side_effect |= clobber.implies_side_effects() != 0; tmpl_entity->AsmTemplate.has_observable_side_effect |= clobber.writes_mem; + // #align_stack only matters if the body makes a call (which requires the stack + // aligned at the call boundary) or manipulates RSP directly. Plain memory access + // through a parameter pointer does NOT require stack realignment, so + // implies_clobber_memory() is intentionally NOT used here. if ((cast(u16)clobber.side_effects & asm_ctx->SideEffectFlag_CONTROL) != 0 || - clobber.implies_clobber_memory()) { + (cast(u16)clobber.implicit_wr & asm_ctx->ClobberReg_RSP) != 0) { asm_acc->saw_call_or_mem = true; }