From 0842930b3fd38802e5a3606b458cec0ca8db9245 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Tue, 6 Feb 2024 10:29:28 +0100 Subject: [PATCH 1/4] Convert operand of newarr to native int when producing reverse P/Invoke array marshalling --- src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs index 7f67f92303014..74a7620a5826d 100644 --- a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs +++ b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs @@ -1085,6 +1085,8 @@ protected virtual void EmitElementCount(ILCodeStream codeStream, MarshalDirectio // if neither sizeConst or sizeParamIndex are specified, default to 1 codeStream.EmitLdc(1); } + + codeStream.Emit(ILOpcode.conv_i); } } From d47b7ca0d14f1cce73a8b3fc0870340c587e28f8 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Tue, 6 Feb 2024 10:45:39 +0100 Subject: [PATCH 2/4] Change to conv_ovf_i --- src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs index 74a7620a5826d..cac9412757e4d 100644 --- a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs +++ b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs @@ -1086,7 +1086,7 @@ protected virtual void EmitElementCount(ILCodeStream codeStream, MarshalDirectio codeStream.EmitLdc(1); } - codeStream.Emit(ILOpcode.conv_i); + codeStream.Emit(ILOpcode.conv_ovf_i); } } From 8c7161c4a2531d9c07fe04dc886a9eda47433d76 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Tue, 6 Feb 2024 11:56:12 +0100 Subject: [PATCH 3/4] Use conv_ovf_i4 --- src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs index cac9412757e4d..ddcfeb98b02a3 100644 --- a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs +++ b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs @@ -1086,7 +1086,7 @@ protected virtual void EmitElementCount(ILCodeStream codeStream, MarshalDirectio codeStream.EmitLdc(1); } - codeStream.Emit(ILOpcode.conv_ovf_i); + codeStream.Emit(ILOpcode.conv_ovf_i4); } } From 1daf5c226c950ed7b01fe9adce23c10935ff9782 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Tue, 6 Feb 2024 12:40:56 +0100 Subject: [PATCH 4/4] PR feedback --- src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs index ddcfeb98b02a3..c5b17ef7ede85 100644 --- a/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs +++ b/src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs @@ -1078,6 +1078,8 @@ protected virtual void EmitElementCount(ILCodeStream codeStream, MarshalDirectio if (sizeConst.HasValue) codeStream.Emit(ILOpcode.add); + + codeStream.Emit(ILOpcode.conv_ovf_i4); } if (!sizeConst.HasValue && !sizeParamIndex.HasValue) @@ -1085,8 +1087,6 @@ protected virtual void EmitElementCount(ILCodeStream codeStream, MarshalDirectio // if neither sizeConst or sizeParamIndex are specified, default to 1 codeStream.EmitLdc(1); } - - codeStream.Emit(ILOpcode.conv_ovf_i4); } }