From 753a12d9ed0861249a19f1ea7bded9d7f861d6df Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 30 Jul 2024 10:28:23 -0700 Subject: [PATCH 1/4] Keep parameter names unless DebuggerSupport is disabled --- .../src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets b/src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets index 2d1526dc69ac5a..ab36c6795a4b0c 100644 --- a/src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets +++ b/src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets @@ -156,6 +156,7 @@ Copyright (c) .NET Foundation. All rights reserved. UnusedInterfaces="$(_TrimmerUnusedInterfaces)" IPConstProp="$(_TrimmerIPConstProp)" Sealer="$(_TrimmerSealer)" + KeepMetadata="@(_TrimmerKeepMetadata)" Warn="$(ILLinkWarningLevel)" NoWarn="$(NoWarn)" @@ -240,6 +241,11 @@ Copyright (c) .NET Foundation. All rights reserved. false + + + <_TrimmerKeepMetadata Include="all" Condition=" '$(DebuggerSupport)' != 'false' " /> + + <_TrimmerPreserveSymbolPaths Condition=" '$(_TrimmerPreserveSymbolPaths)' == '' and '$(DeterministicSourcePaths)' == 'true' ">true <_TrimmerPreserveSymbolPaths Condition=" '$(_TrimmerPreserveSymbolPaths)' == '' ">false From 1a2830cccc0fd8dc29d96ed1bc08fccf2f16339b Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Mon, 5 Aug 2024 20:29:19 +0000 Subject: [PATCH 2/4] Add TrimmingTest --- .../TrimmingTests/DebuggerSupportFalse.cs | 35 +++++++++++++++++++ .../TrimmingTests/DebuggerSupportTrue.cs | 35 +++++++++++++++++++ .../System.Runtime.TrimmingTests.proj | 6 ++++ 3 files changed, 76 insertions(+) create mode 100644 src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs create mode 100644 src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs new file mode 100644 index 00000000000000..cc935373eb4249 --- /dev/null +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#nullable enable + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using System.Reflection; + +/// +/// Ensures setting DebuggerSupport = false causes parameter names to be removed +/// +class Program +{ + static int Main(string[] args) + { + // Ensure the method is kept + MethodWithParameter (""); + + // Get parameter name via trim-incompatible reflection + var parameterName = reflectedType.GetMethod("MethodWithParameter")!.GetParameters()[0].Name; + Console.WriteLine("Got parameter name!" + "[" + parameterName + "]"); + + // Parameter name should be removed + if (parameterName is not null) + return -1; + + return 100; + } + + static Type reflectedType = typeof(Program); + + public static void MethodWithParameter(string parameter) {} +} diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs new file mode 100644 index 00000000000000..2cd7f254f59e41 --- /dev/null +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#nullable enable + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using System.Reflection; + +/// +/// Ensures setting DebuggerSupport = true causes parameter names to be kept +/// +class Program +{ + static int Main(string[] args) + { + // Ensure the method is kept + MethodWithParameter (""); + + // Get parameter name via trim-incompatible reflection + var parameterName = reflectedType.GetMethod("MethodWithParameter")!.GetParameters()[0].Name; + Console.WriteLine("Got parameter name!" + "[" + parameterName + "]"); + + // Parameter name should be kept + if (parameterName != "parameter") + return -1; + + return 100; + } + + static Type reflectedType = typeof(Program); + + public static void MethodWithParameter(string parameter) {} +} diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj index 7b39f85f522a95..fda5b26b57ab6f 100644 --- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj @@ -10,6 +10,12 @@ osx-x64;linux-x64;browser-wasm + + DebuggerSupport + + + DebuggerSupport + DebuggerSupport From c7f5c902a7a066252e13d437cfa23d1f67ca8437 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Mon, 5 Aug 2024 21:34:56 +0000 Subject: [PATCH 3/4] Set NativeAotIncompatible --- .../TrimmingTests/System.Runtime.TrimmingTests.proj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj index fda5b26b57ab6f..a5c28926b272f6 100644 --- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/System.Runtime.TrimmingTests.proj @@ -12,9 +12,11 @@ DebuggerSupport + true DebuggerSupport + true DebuggerSupport From eb08e124a53eb39f215f548b8c46a015b216224d Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 6 Aug 2024 20:43:00 +0000 Subject: [PATCH 4/4] Fix test Removed parameter name is empty, not null, on wasm Also remove unnecessary WriteLine --- .../System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs | 3 +-- .../System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs index cc935373eb4249..4c8c23c3ea6132 100644 --- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportFalse.cs @@ -20,10 +20,9 @@ static int Main(string[] args) // Get parameter name via trim-incompatible reflection var parameterName = reflectedType.GetMethod("MethodWithParameter")!.GetParameters()[0].Name; - Console.WriteLine("Got parameter name!" + "[" + parameterName + "]"); // Parameter name should be removed - if (parameterName is not null) + if (!string.IsNullOrEmpty(parameterName)) return -1; return 100; diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs index 2cd7f254f59e41..cf7ee75c313f5b 100644 --- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/TrimmingTests/DebuggerSupportTrue.cs @@ -20,7 +20,6 @@ static int Main(string[] args) // Get parameter name via trim-incompatible reflection var parameterName = reflectedType.GetMethod("MethodWithParameter")!.GetParameters()[0].Name; - Console.WriteLine("Got parameter name!" + "[" + parameterName + "]"); // Parameter name should be kept if (parameterName != "parameter")