Skip to content

Commit 255baa0

Browse files
authored
Fixes #108964 [Mono] ves_icall_RuntimeType_GetInterfaces generates add extra Implemented Interface (#113721)
* #108964 [Mono] ves_icall_RuntimeType_GetInterfaces generates an extra Implemented Interface * Added the regression test --------- Signed-off-by: Medha Tiwari <medhavns1@gmail.com>
1 parent 13ec54f commit 255baa0

File tree

2 files changed

+3
-8
lines changed

2 files changed

+3
-8
lines changed

src/libraries/System.Runtime/tests/System.Reflection.Tests/TypeInfoTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,7 @@ public void GetMembers(BindingFlags bindingAttributes, int length)
940940
[Theory]
941941
[InlineData(typeof(MembersClass), new Type[] { typeof(TI_NonGenericInterface1), typeof(TI_NonGenericInterface2) })]
942942
[InlineData(typeof(TI_NonGenericInterface2), new Type[0])]
943+
[InlineData(typeof(IntEnum), new Type[] { typeof(IComparable), typeof(ISpanFormattable), typeof(IFormattable), typeof(IConvertible) })]
943944
public void GetInterfaces(Type type, Type[] expected)
944945
{
945946
Assert.Equal(expected.OrderBy(t => t.Name), type.GetTypeInfo().GetInterfaces().OrderBy(t => t.Name));

src/mono/mono/metadata/class-init.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3964,21 +3964,15 @@ mono_class_setup_interfaces (MonoClass *klass, MonoError *error)
39643964
if (iface)
39653965
array_ifaces [interface_count ++] = iface;
39663966
}
3967-
int mult = klass->element_class->enumtype ? 2 : 1;
39683967

3969-
interfaces = (MonoClass **)mono_image_alloc0 (klass->image, sizeof (MonoClass*) * interface_count * mult);
3968+
interfaces = (MonoClass **)mono_image_alloc0 (klass->image, sizeof (MonoClass*) * interface_count );
39703969

39713970
int itf_idx = 0;
39723971
args [0] = m_class_get_byval_arg (m_class_get_element_class (klass));
39733972
for (int i = 0; i < interface_count; ++i)
39743973
interfaces [itf_idx++] = mono_class_bind_generic_parameters (array_ifaces [i], 1, args, FALSE);
3975-
if (klass->element_class->enumtype) {
3976-
args [0] = mono_class_enum_basetype_internal (klass->element_class);
3977-
for (int i = 0; i < interface_count; ++i)
3978-
interfaces [itf_idx++] = mono_class_bind_generic_parameters (array_ifaces [i], 1, args, FALSE);
3979-
}
3980-
interface_count *= mult;
39813974
g_assert (itf_idx == interface_count);
3975+
39823976
} else if (mono_class_is_ginst (klass)) {
39833977
MonoClass *gklass = mono_class_get_generic_class (klass)->container_class;
39843978

0 commit comments

Comments
 (0)