From 38ac4b742b01c9024aae34edb28e42c216225000 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 c9d5521a8b6708..775cdf0fb2439d 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -808,8 +808,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 ff05a3d9a445981d27a1091dc68d75639f56a00a 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 775cdf0fb2439d..83dffd0013f15e 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -807,24 +807,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 878be2afad935db78e71a66fdc3ee978c8863f52 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 83dffd0013f15e..9f421d2757d249 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -799,7 +799,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) @@ -807,12 +807,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 5687feaee2abe2ed0ad7933d87295da7a40bb3d5 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 9f421d2757d249..a9bdb0f6c050b7 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -810,10 +810,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 57ff2f82ee941079c6e113a194e969f629b2823d 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 a9bdb0f6c050b7..be863e82f73f30 100644 --- a/src/mono/mono/mini/mini-wasm.c +++ b/src/mono/mono/mini/mini-wasm.c @@ -808,7 +808,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); }