From f6335707705ae9e2335760679f9473533e320df8 Mon Sep 17 00:00:00 2001 From: Andy Ayers Date: Thu, 30 Apr 2026 13:02:19 -0700 Subject: [PATCH 1/2] [Wasm RyuJit] Use local's register type when loading it's value Fixes an assert loading some register-sized struct locals. --- src/coreclr/jit/codegenwasm.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coreclr/jit/codegenwasm.cpp b/src/coreclr/jit/codegenwasm.cpp index a9d5308d63ee41..ef0c7e91516ac6 100644 --- a/src/coreclr/jit/codegenwasm.cpp +++ b/src/coreclr/jit/codegenwasm.cpp @@ -2302,8 +2302,9 @@ void CodeGen::genCodeForLclVar(GenTreeLclVar* tree) else { assert(genIsValidReg(varDsc->GetRegNum())); - unsigned wasmLclIndex = WasmRegToIndex(varDsc->GetRegNum()); - GetEmitter()->emitIns_I(INS_local_get, emitTypeSize(tree), wasmLclIndex); + var_types type = varDsc->GetRegisterType(); + unsigned wasmLclIndex = WasmRegToIndex(varDsc->GetRegNum()); + GetEmitter()->emitIns_I(INS_local_get, emitTypeSize(type), wasmLclIndex); // In this case, the resulting tree type may be different from the local var type where the value originates, // and so we need an explicit conversion since we can't "load" // the value with a different type like we can if the value is on the shadow stack. From 449e993eabeaa454929fd08f65076f9a7e4fbf76 Mon Sep 17 00:00:00 2001 From: Andy Ayers Date: Thu, 30 Apr 2026 13:56:27 -0700 Subject: [PATCH 2/2] review feedback --- src/coreclr/jit/codegenwasm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/codegenwasm.cpp b/src/coreclr/jit/codegenwasm.cpp index ef0c7e91516ac6..9f111f738003fc 100644 --- a/src/coreclr/jit/codegenwasm.cpp +++ b/src/coreclr/jit/codegenwasm.cpp @@ -2302,7 +2302,7 @@ void CodeGen::genCodeForLclVar(GenTreeLclVar* tree) else { assert(genIsValidReg(varDsc->GetRegNum())); - var_types type = varDsc->GetRegisterType(); + var_types type = varDsc->GetRegisterType(tree); unsigned wasmLclIndex = WasmRegToIndex(varDsc->GetRegNum()); GetEmitter()->emitIns_I(INS_local_get, emitTypeSize(type), wasmLclIndex); // In this case, the resulting tree type may be different from the local var type where the value originates,