From d9fa40733b832035f370df3dab7b2aa2975ae99f Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 4 Aug 2025 20:41:22 +0200 Subject: [PATCH 1/5] fix --- src/mono/mono/mini/mini-wasm.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm.c b/src/mono/mono/mini/mini-wasm.c index a0587570fe2bdf..c617aa7033093c 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -807,8 +807,22 @@ mini_wasm_is_scalar_vtype (MonoType *type, MonoType **etype) } if (etype) { - if (!(*etype)) - *etype = mono_get_int32_type (); + if (!(*etype)) { + switch (size) + { + case 1: + *etype = m_class_get_byval_arg (mono_defaults.sbyte_class); + break; + case 2: + *etype = m_class_get_byval_arg (mono_defaults.int16_class); + break; + case 4: + *etype = mono_get_int32_type (); + break; + default: + return FALSE; + } + } } return TRUE; From 0fc20dae6c3347b8adfe3a7b0fb56d46d8af94c8 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Tue, 5 Aug 2025 13:44:03 +0200 Subject: [PATCH 2/5] testing Larry's feedback --- src/mono/mono/mini/mini-wasm.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm.c b/src/mono/mono/mini/mini-wasm.c index c617aa7033093c..d59f5f84998c2b 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -806,24 +806,12 @@ mini_wasm_is_scalar_vtype (MonoType *type, MonoType **etype) } } - if (etype) { - if (!(*etype)) { - switch (size) - { - case 1: - *etype = m_class_get_byval_arg (mono_defaults.sbyte_class); - break; - case 2: - *etype = m_class_get_byval_arg (mono_defaults.int16_class); - break; - case 4: - *etype = mono_get_int32_type (); - break; - default: - return FALSE; - } - } + // we don't want to scalarize an empty struct + if (nfields == 0) { + return FALSE; } + g_assert (!etype || *etype); + return TRUE; } From 091ada2a845ddc67dfd765bf33348128620e6974 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Tue, 5 Aug 2025 17:05:09 +0200 Subject: [PATCH 3/5] another attempt --- src/mono/mono/mini/mini-wasm.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm.c b/src/mono/mono/mini/mini-wasm.c index d59f5f84998c2b..54df6568bc0cd7 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -798,7 +798,7 @@ mini_wasm_is_scalar_vtype (MonoType *type, MonoType **etype) } else if (MONO_TYPE_ISSTRUCT (t)) { if (!mini_wasm_is_scalar_vtype (t, etype)) return FALSE; - } else if (!((MONO_TYPE_IS_PRIMITIVE (t) || MONO_TYPE_IS_REFERENCE (t) || MONO_TYPE_IS_POINTER (t)))) { + } else if (!(MONO_TYPE_IS_PRIMITIVE (t) || MONO_TYPE_IS_REFERENCE (t) || MONO_TYPE_IS_POINTER (t))) { return FALSE; } else { if (etype) @@ -806,12 +806,13 @@ mini_wasm_is_scalar_vtype (MonoType *type, MonoType **etype) } } - // we don't want to scalarize an empty struct + // empty struct if (nfields == 0) { - return FALSE; + *etype = m_class_get_byval_arg (mono_defaults.sbyte_class); + return TRUE; } g_assert (!etype || *etype); - return TRUE; + return FALSE; } From 785c947d0509e0cd38715dfb60e3bc68fcfe55fc Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Tue, 5 Aug 2025 17:09:49 +0200 Subject: [PATCH 4/5] more --- src/mono/mono/mini/mini-wasm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm.c b/src/mono/mono/mini/mini-wasm.c index 54df6568bc0cd7..1e3c88ab72c1dc 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -809,10 +809,9 @@ mini_wasm_is_scalar_vtype (MonoType *type, MonoType **etype) // empty struct if (nfields == 0) { *etype = m_class_get_byval_arg (mono_defaults.sbyte_class); - return TRUE; } g_assert (!etype || *etype); - return FALSE; + return TRUE; } From 06bc1cf7c923abee60d1806bd6727d5e4f390c85 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Tue, 5 Aug 2025 19:36:17 +0200 Subject: [PATCH 5/5] Update src/mono/mono/mini/mini-wasm.c Co-authored-by: Larry Ewing --- src/mono/mono/mini/mini-wasm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/mono/mini/mini-wasm.c b/src/mono/mono/mini/mini-wasm.c index 1e3c88ab72c1dc..55d9fceba4cbf2 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -807,7 +807,7 @@ mini_wasm_is_scalar_vtype (MonoType *type, MonoType **etype) } // empty struct - if (nfields == 0) { + if (nfields == 0 && etype) { *etype = m_class_get_byval_arg (mono_defaults.sbyte_class); }