diff --git a/src/mono/mono/metadata/class-init.c b/src/mono/mono/metadata/class-init.c index 8608dc30bfc63..0f5643e663f0f 100644 --- a/src/mono/mono/metadata/class-init.c +++ b/src/mono/mono/metadata/class-init.c @@ -1039,18 +1039,14 @@ class_composite_fixup_cast_class (MonoClass *klass, gboolean for_ptr) case MONO_TYPE_U2: klass->cast_class = mono_defaults.int16_class; break; - case MONO_TYPE_U4: -#if TARGET_SIZEOF_VOID_P == 4 case MONO_TYPE_I: case MONO_TYPE_U: -#endif + klass->cast_class = mono_defaults.int_class; + break; + case MONO_TYPE_U4: klass->cast_class = mono_defaults.int32_class; break; case MONO_TYPE_U8: -#if TARGET_SIZEOF_VOID_P == 8 - case MONO_TYPE_I: - case MONO_TYPE_U: -#endif klass->cast_class = mono_defaults.int64_class; break; default: diff --git a/src/tests/Loader/classloader/Casting/Normalization.cs b/src/tests/Loader/classloader/Casting/Normalization.cs new file mode 100644 index 0000000000000..0ab384b3aa50c --- /dev/null +++ b/src/tests/Loader/classloader/Casting/Normalization.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Runtime.InteropServices; + +using Xunit; + +public class NormalizationTests +{ + [Fact] + public static void IntPtrArrayNormalization() + { + object x0 = new long[1]; + object x1 = new ulong[1]; + + Assert.False(x0 is IntPtr[]); + Assert.False(x1 is IntPtr[]); + } +} diff --git a/src/tests/Loader/classloader/Casting/Normalization.csproj b/src/tests/Loader/classloader/Casting/Normalization.csproj new file mode 100644 index 0000000000000..54c9089f296b1 --- /dev/null +++ b/src/tests/Loader/classloader/Casting/Normalization.csproj @@ -0,0 +1,5 @@ + + + + +