From 87e4fd225f7fecf592c1ef3746c34336d3a44ccc Mon Sep 17 00:00:00 2001 From: marcusturewicz <24448509+marcusturewicz@users.noreply.github.com> Date: Sat, 11 Apr 2020 12:55:18 +1000 Subject: [PATCH 1/5] Override IsByRefLike on S.R.E.*Builder classes Fixes #8828 --- .../src/System/Reflection/Emit/EnumBuilder.cs | 2 ++ .../src/System/Reflection/Emit/GenericTypeParameterBuilder.cs | 2 ++ .../src/System/Reflection/Emit/TypeBuilder.cs | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs index 4f58098617fdb3..3b0e0350bf9df1 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs @@ -91,6 +91,8 @@ public FieldBuilder DefineLiteral(string literalName, object? literalValue) public override Type? BaseType => m_typeBuilder.BaseType; + public override bool IsByRefLike => false; + protected override ConstructorInfo? GetConstructorImpl(BindingFlags bindingAttr, Binder? binder, CallingConventions callConvention, Type[] types, ParameterModifier[]? modifiers) { diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs index 547d160a664262..d0f930e4c763ea 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs @@ -52,6 +52,8 @@ public override bool Equals(object? o) public override Module Module => m_type.Module; + public override bool IsByRefLike => false; + internal int MetadataTokenInternal => m_type.MetadataTokenInternal; #endregion diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs index f69d99e02a9ec8..a78fd852c97995 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs @@ -721,6 +721,8 @@ public override string ToString() public override Module Module => GetModuleBuilder(); + public override bool IsByRefLike => false; + internal int MetadataTokenInternal => m_tdType.Token; #endregion From ae27e0df12c2b795f8a4a3d5b1705be4cf956465 Mon Sep 17 00:00:00 2001 From: marcusturewicz <24448509+marcusturewicz@users.noreply.github.com> Date: Mon, 13 Apr 2020 11:17:19 +1000 Subject: [PATCH 2/5] Adds tests --- .../EnumBuilder.Properties.Tests.cs | 7 +++++++ .../GenericTypeParameterBuilderIsByRefLike.cs | 20 +++++++++++++++++++ .../TypeBuilder/TypeBuilderIsByRefLike.cs | 18 +++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs create mode 100644 src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderIsByRefLike.cs diff --git a/src/libraries/System.Reflection.Emit/tests/EnumBuilder/EnumBuilder.Properties.Tests.cs b/src/libraries/System.Reflection.Emit/tests/EnumBuilder/EnumBuilder.Properties.Tests.cs index e13310eae52656..2e349c9c3184bd 100644 --- a/src/libraries/System.Reflection.Emit/tests/EnumBuilder/EnumBuilder.Properties.Tests.cs +++ b/src/libraries/System.Reflection.Emit/tests/EnumBuilder/EnumBuilder.Properties.Tests.cs @@ -55,5 +55,12 @@ public void IsArray() Assert.True(arrType.IsArray); Assert.False(arrType.IsSZArray); } + + [Fact] + public void IsByRefLikeReturnsFalse() + { + EnumBuilder enumBuilder = Helpers.DynamicEnum(TypeAttributes.Public, typeof(int)); + Assert.False(enumBuilder.IsByRefLike); + } } } diff --git a/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs b/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs new file mode 100644 index 00000000000000..3ed92988e0c824 --- /dev/null +++ b/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.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. +// See the LICENSE file in the project root for more information. + +using Xunit; + +namespace System.Reflection.Emit.Tests +{ + public class GenericTypeParameterBuilderIsByRefLike + { + [Fact] + public void IsByRefLikeReturnsFalse() + { + TypeBuilder type = Helpers.DynamicType(TypeAttributes.Public); + string[] typeParamNames = new string[] { "TFirst" }; + GenericTypeParameterBuilder[] typeParams = type.DefineGenericParameters(typeParamNames); + Assert.False(typeParams[0].IsByRefLike); + } + } +} diff --git a/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderIsByRefLike.cs b/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderIsByRefLike.cs new file mode 100644 index 00000000000000..ab69a26c0bbd46 --- /dev/null +++ b/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderIsByRefLike.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Xunit; + +namespace System.Reflection.Emit.Tests +{ + public class TypeBuilderIsByRefLike + { + [Fact] + public void IsByRefLikeReturnsFalse() + { + TypeBuilder type = Helpers.DynamicType(TypeAttributes.Public); + Assert.False(type.IsByRefLike); + } + } +} From 66cc65e4cc1ccb6c4d23029652c108d1b4768d8b Mon Sep 17 00:00:00 2001 From: marcusturewicz <24448509+marcusturewicz@users.noreply.github.com> Date: Mon, 13 Apr 2020 11:19:58 +1000 Subject: [PATCH 3/5] Update System.Reflection.Emit.Tests.csproj --- .../tests/System.Reflection.Emit.Tests.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Reflection.Emit/tests/System.Reflection.Emit.Tests.csproj b/src/libraries/System.Reflection.Emit/tests/System.Reflection.Emit.Tests.csproj index 651e9b6959c89c..e5d46e991da82f 100644 --- a/src/libraries/System.Reflection.Emit/tests/System.Reflection.Emit.Tests.csproj +++ b/src/libraries/System.Reflection.Emit/tests/System.Reflection.Emit.Tests.csproj @@ -25,6 +25,7 @@ + @@ -95,6 +96,7 @@ + @@ -111,4 +113,4 @@ - \ No newline at end of file + From b56bd56b9ad69167fbab20bedd0b42f5c69c4df3 Mon Sep 17 00:00:00 2001 From: Marcus Turewicz <24448509+marcusturewicz@users.noreply.github.com> Date: Thu, 16 Apr 2020 12:01:41 +1000 Subject: [PATCH 4/5] Bumping CI --- .../GenericTypeParameterBuilderIsByRefLike.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs b/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs index 3ed92988e0c824..5274332d0c3eb1 100644 --- a/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs +++ b/src/libraries/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderIsByRefLike.cs @@ -12,7 +12,7 @@ public class GenericTypeParameterBuilderIsByRefLike public void IsByRefLikeReturnsFalse() { TypeBuilder type = Helpers.DynamicType(TypeAttributes.Public); - string[] typeParamNames = new string[] { "TFirst" }; + var typeParamNames = new string[] { "TFirst" }; GenericTypeParameterBuilder[] typeParams = type.DefineGenericParameters(typeParamNames); Assert.False(typeParams[0].IsByRefLike); } From f6723a933d302dcfaf5de824f92caeaf9ef4eb13 Mon Sep 17 00:00:00 2001 From: marcusturewicz <24448509+marcusturewicz@users.noreply.github.com> Date: Sat, 18 Apr 2020 13:01:36 +1000 Subject: [PATCH 5/5] Update mono as well --- .../src/System/Reflection/Emit/EnumBuilder.Mono.cs | 2 ++ .../src/System/Reflection/Emit/GenericTypeParameterBuilder.cs | 2 ++ .../src/System/Reflection/Emit/TypeBuilder.Mono.cs | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs index ca53d05ed0e625..e1ae8c2983eb8a 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs @@ -452,6 +452,8 @@ public override bool IsAssignableFrom([NotNullWhen(true)] TypeInfo? typeInfo) } public override bool IsTypeDefinition => true; + + public override bool IsByRefLike => false; } } #endif diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs index d9cb98d453e0a1..04490cad975afa 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs @@ -493,6 +493,8 @@ internal override bool IsUserType return false; } } + + public override bool IsByRefLike => false; } } #endif diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs index bccfb62b5d72e3..ef8559975481f2 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs @@ -2042,6 +2042,8 @@ private static void throw_argument_ConstantDoesntMatch() } public override bool IsTypeDefinition => true; + + public override bool IsByRefLike => false; } } #endif