From 7a095faf3925689f2a3450da1a76fdd79a070de9 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Mon, 11 Jan 2021 16:45:46 +0100 Subject: Sweep EntryPoint method reference (#1726) --- external/cecil | 2 +- src/linker/Linker.Steps/SweepStep.cs | 4 ++++ .../Dependencies/ReferenceWithEntryPoint_Lib.cs | 13 +++++++++++++ .../References/ReferenceWithEntryPoint.cs | 21 +++++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 test/Mono.Linker.Tests.Cases/References/Dependencies/ReferenceWithEntryPoint_Lib.cs create mode 100644 test/Mono.Linker.Tests.Cases/References/ReferenceWithEntryPoint.cs diff --git a/external/cecil b/external/cecil index 8cf97c125..2f9b2fb75 160000 --- a/external/cecil +++ b/external/cecil @@ -1 +1 @@ -Subproject commit 8cf97c125748b0a2832f0420728c8fac2ae22348 +Subproject commit 2f9b2fb759c50e756f9c6580b9fb8518581020c0 diff --git a/src/linker/Linker.Steps/SweepStep.cs b/src/linker/Linker.Steps/SweepStep.cs index 5f74b3075..4bf6a60da 100644 --- a/src/linker/Linker.Steps/SweepStep.cs +++ b/src/linker/Linker.Steps/SweepStep.cs @@ -223,6 +223,10 @@ namespace Mono.Linker.Steps if (main.HasModuleReferences) SweepCollectionMetadata (main.ModuleReferences); + if (main.EntryPoint != null && !Annotations.IsMarked (main.EntryPoint)) { + main.EntryPoint = null; + } + SweepTypeForwarders (assembly); SweepAssemblyReferences (assembly); diff --git a/test/Mono.Linker.Tests.Cases/References/Dependencies/ReferenceWithEntryPoint_Lib.cs b/test/Mono.Linker.Tests.Cases/References/Dependencies/ReferenceWithEntryPoint_Lib.cs new file mode 100644 index 000000000..a11080c39 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/References/Dependencies/ReferenceWithEntryPoint_Lib.cs @@ -0,0 +1,13 @@ +namespace Mono.Linker.Tests.Cases.References.Dependencies +{ + public class ReferenceWithEntryPoint_Lib + { + public static void Main () + { + } + + public static void UsedMethod () + { + } + } +} \ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/References/ReferenceWithEntryPoint.cs b/test/Mono.Linker.Tests.Cases/References/ReferenceWithEntryPoint.cs new file mode 100644 index 000000000..dd572e64e --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/References/ReferenceWithEntryPoint.cs @@ -0,0 +1,21 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; +using Mono.Linker.Tests.Cases.References.Dependencies; + +namespace Mono.Linker.Tests.Cases.References +{ + // Actions: + // link - This assembly + // link - lib.exe + + [SetupCompileBefore ("lib.exe", new[] { "Dependencies/ReferenceWithEntryPoint_Lib.cs" })] + [KeptAssembly ("lib.exe")] + [KeptMemberInAssembly ("lib.exe", typeof (ReferenceWithEntryPoint_Lib), "UsedMethod()")] + class ReferenceWithEntryPoint + { + public static void Main () + { + ReferenceWithEntryPoint_Lib.UsedMethod (); + } + } +} -- cgit v1.2.3