Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/linker/Linker.Steps/SweepStep.cs13
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/AttributeArgumentForwarded.cs43
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ForwarderLibrary.cs1
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ImplementationLibrary.cs5
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ReferenceImplementationLibrary.cs5
5 files changed, 50 insertions, 17 deletions
diff --git a/src/linker/Linker.Steps/SweepStep.cs b/src/linker/Linker.Steps/SweepStep.cs
index bfe7c227c..670242d9e 100644
--- a/src/linker/Linker.Steps/SweepStep.cs
+++ b/src/linker/Linker.Steps/SweepStep.cs
@@ -449,16 +449,21 @@ namespace Mono.Linker.Steps
if (type.IsWindowsRuntimeProjection)
return;
- if (type is GenericInstanceType git && git.HasGenericArguments) {
+ switch (type) {
+ case GenericInstanceType git:
UpdateTypeScope (git.ElementType, assembly);
foreach (var ga in git.GenericArguments)
UpdateTypeScope (ga, assembly);
return;
- }
-
- if (type is ArrayType at) {
+ case ArrayType at:
UpdateTypeScope (at.ElementType, assembly);
return;
+ case PointerType pt:
+ UpdateTypeScope (pt.ElementType, assembly);
+ return;
+ case FunctionPointerType fpt:
+ // Currently not possible with C#: https://github.com/dotnet/roslyn/issues/48765
+ throw new InternalErrorException ($"Function pointer type in custom attribute argument '{fpt}' - currently not supported.");
}
TypeDefinition td = type.Resolve ();
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/AttributeArgumentForwarded.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/AttributeArgumentForwarded.cs
index 72c261520..171aad0b8 100644
--- a/test/Mono.Linker.Tests.Cases/TypeForwarding/AttributeArgumentForwarded.cs
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/AttributeArgumentForwarded.cs
@@ -22,50 +22,52 @@ namespace Mono.Linker.Tests.Cases.TypeForwarding
[RemovedAssembly ("Forwarder.dll")]
[KeptMemberInAssembly ("Implementation.dll", typeof (ImplementationLibrary))]
+ [KeptMemberInAssembly ("Implementation.dll", typeof (ImplementationStruct))]
class AttributeArgumentForwarded
{
static void Main ()
{
- Test_1 ();
- Test_1b ();
- Test_1c ();
- Test_2 ();
- Test_3 ();
- Test_3a ();
+ Test_Parameter_TypeRef ();
+ Test_Parameter_TypeRefMDArray ();
+ Test_Parameter_PointerTypeRef ();
+ Test_Property_ArrayOfTypeRefs ();
+ Test_Field_GenericOfTypeRefArray ();
+ Test_Field_OpenGeneric ();
+ Test_Field_ArrayOfPointerTypeRef ();
}
[Kept]
[KeptAttributeAttribute (typeof (TestTypeAttribute))]
[TestType (typeof (ImplementationLibrary))]
- public static void Test_1 ()
+ public static void Test_Parameter_TypeRef ()
{
}
[Kept]
[KeptAttributeAttribute (typeof (TestTypeAttribute))]
[TestType (typeof (ImplementationLibrary[,][]))]
- public static void Test_1b ()
+ public static void Test_Parameter_TypeRefMDArray ()
{
}
[Kept]
[KeptAttributeAttribute (typeof (TestTypeAttribute))]
- [TestType (typeof (ImplementationLibrary[,][]))]
- public static void Test_1c ()
+ [TestType (typeof (ImplementationStruct*))]
+ public static void Test_Parameter_PointerTypeRef ()
{
}
[Kept]
[KeptAttributeAttribute (typeof (TestTypeAttribute))]
[TestType (TestProperty = new object[] { typeof (ImplementationLibrary) })]
- public static void Test_2 ()
+ public static void Test_Property_ArrayOfTypeRefs ()
{
}
[Kept]
[KeptAttributeAttribute (typeof (TestTypeAttribute))]
[TestType (TestField = typeof (SomeGenericType<ImplementationLibrary[]>))]
- public static void Test_3 ()
+ public static void Test_Field_GenericOfTypeRefArray ()
{
}
@@ -73,9 +75,24 @@ namespace Mono.Linker.Tests.Cases.TypeForwarding
[Kept]
[KeptAttributeAttribute (typeof (TestTypeAttribute))]
[TestType (TestField = typeof (SomeGenericType<>))]
- public static void Test_3a ()
+ public static void Test_Field_OpenGeneric ()
{
}
+
+ [Kept]
+ [KeptAttributeAttribute (typeof (TestTypeAttribute))]
+ [TestType (TestField = new object[] { typeof (ImplementationStruct*) })]
+ public static void Test_Field_ArrayOfPointerTypeRef ()
+ {
+ }
+
+ // This hits Roslyn bug https://github.com/dotnet/roslyn/issues/48765
+ //[Kept]
+ //[KeptAttributeAttribute (typeof (TestTypeAttribute))]
+ //[TestType (TestField = new object[] { typeof (delegate*<int, void>) })]
+ //public static void Test_Field_ArrayOfFunctionPointer ()
+ //{
+ //}
}
[KeptBaseType (typeof (Attribute))]
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ForwarderLibrary.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ForwarderLibrary.cs
index bb1521525..441a971eb 100644
--- a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ForwarderLibrary.cs
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ForwarderLibrary.cs
@@ -1,3 +1,4 @@
using System;
[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.Dependencies.ImplementationLibrary))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.Dependencies.ImplementationStruct))]
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ImplementationLibrary.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ImplementationLibrary.cs
index 98fab0dba..86a37fdfc 100644
--- a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ImplementationLibrary.cs
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ImplementationLibrary.cs
@@ -13,4 +13,9 @@ namespace Mono.Linker.Tests.Cases.TypeForwarding.Dependencies
return "Hello";
}
}
+
+ public struct ImplementationStruct
+ {
+ public int Field;
+ }
}
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ReferenceImplementationLibrary.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ReferenceImplementationLibrary.cs
index ff4def7c9..8796effb1 100644
--- a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ReferenceImplementationLibrary.cs
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/ReferenceImplementationLibrary.cs
@@ -15,5 +15,10 @@ namespace Mono.Linker.Tests.Cases.TypeForwarding.Dependencies
return null;
}
}
+
+ public struct ImplementationStruct
+ {
+ public int Field;
+ }
#endif
}