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:
authorMarek Safar <marek.safar@gmail.com>2020-12-24 14:43:30 +0300
committerGitHub <noreply@github.com>2020-12-24 14:43:30 +0300
commit6d05762d54a56309e49e6d8b70dca272e78e3e19 (patch)
tree6a3d943bb160e0f4335caffa87a042b5dffa7886 /test/Mono.Linker.Tests.Cases/TypeForwarding
parent8ecdb90f69bacd96eb8a171d01a29b83494c0611 (diff)
Fixes removal of unused assembly references for linked assemblies (#1683)
Diffstat (limited to 'test/Mono.Linker.Tests.Cases/TypeForwarding')
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs1
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs6
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs6
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs4
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs24
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs33
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs130
-rw-r--r--test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs1
8 files changed, 205 insertions, 0 deletions
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs
new file mode 100644
index 000000000..7145725e4
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs
@@ -0,0 +1 @@
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.C1))]
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs
new file mode 100644
index 000000000..ec8389b0d
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs
@@ -0,0 +1,6 @@
+namespace Mono.Linker.Tests.Cases.TypeForwarding
+{
+ public class C1
+ {
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs
new file mode 100644
index 000000000..58dc0d77b
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs
@@ -0,0 +1,6 @@
+namespace Mono.Linker.Tests.Cases.TypeForwarding
+{
+ public class C2
+ {
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs
new file mode 100644
index 000000000..cb79a2f0d
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs
@@ -0,0 +1,4 @@
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.C))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.G<>))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.I))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.S))] \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs
new file mode 100644
index 000000000..6c5c01fff
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs
@@ -0,0 +1,24 @@
+namespace Mono.Linker.Tests.Cases.TypeForwarding
+{
+ public class C
+ {
+
+ }
+
+ public class G<T>
+ {
+ public class N
+ {
+ }
+ }
+
+ public struct S
+ {
+
+ }
+
+ public interface I
+ {
+ public void Test (C c);
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs
new file mode 100644
index 000000000..a5e019cb0
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs
@@ -0,0 +1,33 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.TypeForwarding
+{
+ [SkipUnresolved (true)]
+ [KeepTypeForwarderOnlyAssemblies ("false")]
+ [SetupCompileBefore ("Lib.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs" })]
+ [SetupCompileBefore ("AnotherLibrary.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs" })]
+
+ [SetupCompileAfter ("AnotherLibrary.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs" })]
+ [SetupCompileAfter ("Implementation.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs" }, removeFromLinkerInput: true)]
+ [SetupCompileAfter ("Lib.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs" }, references: new[] { "Implementation.dll" })]
+
+ public class TypeForwardedIsUpdatedForMissingType
+ {
+ public static void Main ()
+ {
+ Test (null);
+ }
+
+ // It's important that the assembly reference to AnotherLibrary is added before Lib
+ public void DependencyWhichIsRemovedFromAssemblyList (C2 c)
+ {
+ }
+
+ [Kept]
+ static void Test (C1 c)
+ {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs
new file mode 100644
index 000000000..754d2c282
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs
@@ -0,0 +1,130 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.TypeForwarding
+{
+ // Actions:
+ // link - This assembly, Forwarder.dll and Implementation.dll
+ [KeepTypeForwarderOnlyAssemblies ("false")]
+
+ [SetupLinkerArgument ("--skip-unresolved", "true")]
+
+ [SetupCompileArgument ("/unsafe")]
+ [SetupCompileBefore ("Forwarder.dll", new[] { "Dependencies/TypeForwardersRewriteLib.cs" })]
+
+ [SetupCompileAfter ("Implementation.dll", new[] { "Dependencies/TypeForwardersRewriteLib.cs" })]
+ [SetupCompileAfter ("Forwarder.dll", new[] { "Dependencies/TypeForwardersRewriteForwarders.cs" }, references: new[] { "Implementation.dll" })]
+
+ [RemovedAssembly ("Forwarder.dll")]
+ [RemovedAssemblyReference ("test", "Forwarder")]
+ unsafe class TypeForwardersRewrite
+ {
+ static void Main ()
+ {
+#if NETCOREAPP
+ Test (null);
+#endif
+ Test2 (null);
+ Test3<C> (ref c);
+ Test4 (null, null);
+ Test5 (null);
+ Test6<string> (null);
+ c = null;
+ g = null;
+ e += null;
+ I tc = new TC ();
+ tc.Test (null);
+ I ti = new TS ();
+ ti.Test (null);
+ var gc = new GC<TC> ();
+ }
+
+ [Kept]
+ static C c;
+ [Kept]
+ static G<C> g;
+
+ [Kept]
+ [KeptBackingField]
+ [KeptEventAddMethod]
+ [KeptEventRemoveMethod]
+ static event D e;
+
+ [Kept]
+ [KeptBaseType (typeof (MulticastDelegate))]
+ [KeptMember (".ctor(System.Object,System.IntPtr)")]
+ [KeptMember ("Invoke()")]
+ delegate C D ();
+
+#if NETCOREAPP
+ [Kept]
+ static void Test (delegate*<C, S*> arg)
+ {
+ }
+#endif
+
+ [Kept]
+ static C Test2 (C c)
+ {
+ C lv = null;
+ return lv;
+ }
+
+ [Kept]
+ static C[] Test3<T> (ref C c) where T : C
+ {
+ return null;
+ }
+
+ [Kept]
+ static G<C> Test4 (G<C>[] a, object b)
+ {
+ Console.WriteLine (typeof (C));
+ Console.WriteLine (typeof (G<>));
+ Console.WriteLine (typeof (G<>.N));
+ C c = (C) b;
+ Console.WriteLine (c);
+ return null;
+ }
+
+ [Kept]
+ static G<C>.N Test5 (G<C>.N arg)
+ {
+ return null;
+ }
+
+ [Kept]
+ static void Test6<T> (G<T>.N arg)
+ {
+ }
+
+ [Kept]
+ [KeptBaseType (typeof (C))]
+ [KeptMember (".ctor()")]
+ [KeptInterface (typeof (I))]
+ class TC : C, I
+ {
+ [Kept]
+ void I.Test (C c)
+ {
+ }
+ }
+
+ [Kept]
+ [KeptInterface (typeof (I))]
+ struct TS : I
+ {
+ [Kept]
+ public void Test (C c)
+ {
+ }
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class GC<T> where T : I
+ {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs
index deef0e497..23b8ddc1e 100644
--- a/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs
+++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs
@@ -18,6 +18,7 @@ namespace Mono.Linker.Tests.Cases.TypeForwarding
[SetupCompileAfter ("Forwarder.dll", new[] { "Dependencies/ForwarderLibrary.cs" }, references: new[] { "Implementation.dll" })]
[RemovedAssembly ("Forwarder.dll")]
+ [RemovedAssemblyReference ("test", "Forwarder")]
[KeptMemberInAssembly ("Implementation.dll", typeof (ImplementationLibrary), "GetSomeValue()")]
[KeptMemberInAssembly ("Library.dll", typeof (LibraryUsingForwarder), "GetValueFromOtherAssembly()")]
class UsedForwarderIsRemovedWhenLink