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