diff --git a/src/coreclr/tools/ILTrim.Core/ILTrim.Core.csproj b/src/coreclr/tools/ILTrim.Core/ILTrim.Core.csproj index 4297b6878b3706..95f9c6fd4230be 100644 --- a/src/coreclr/tools/ILTrim.Core/ILTrim.Core.csproj +++ b/src/coreclr/tools/ILTrim.Core/ILTrim.Core.csproj @@ -51,6 +51,7 @@ + diff --git a/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt b/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt index 90c596ee59fa81..bea4bab55c9367 100644 --- a/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt +++ b/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt @@ -237,11 +237,6 @@ Inheritance.Interfaces.OnReferenceType.InterfaceTypeInOtherUsedOnlyByCopiedAssem Inheritance.Interfaces.OnReferenceType.InterfaceUsedOnlyAsConstraintIsKept Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndAssemblyPreserveAll Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndTypePreserveAll -Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndTypePreserveFields -Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndTypePreserveFieldsWithInterfacesMarked -Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndTypePreserveMethods -Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndTypePreserveMethodsWithInterfacesMarked -Inheritance.Interfaces.OnReferenceType.NoInstanceCtor.NoInstanceCtorAndTypePreserveNone Inheritance.Interfaces.OnReferenceType.NoKeptCtor.DynamicDependencyPreservesInterfaceMethod Inheritance.Interfaces.OnReferenceType.NoKeptCtor.ExplicitInterfaceCanBeRemovedFromClassWithOnlyStaticMethodUsed Inheritance.Interfaces.OnReferenceType.NoKeptCtor.GenericWithConstraintDoesNotCauseOtherTypesToKeepInterface @@ -253,8 +248,6 @@ Inheritance.Interfaces.OnReferenceType.NoKeptCtor.PreserveDependencyPreservesInt Inheritance.Interfaces.OnReferenceType.NoKeptCtor.UnusedTypeHasExplicitInterfaceMethodPreservedViaXml Inheritance.Interfaces.OnReferenceType.NoKeptCtor.UnusedTypeHasExplicitInterfacePropertyPreservedViaXml Inheritance.Interfaces.OnReferenceType.NoKeptCtor.UnusedTypeHasInterfaceMethodPreservedViaXml -Inheritance.Interfaces.OnReferenceType.NoKeptCtor.UnusedTypeWithPreserveFields -Inheritance.Interfaces.OnReferenceType.NoKeptCtor.UnusedTypeWithPreserveMethods Inheritance.Interfaces.OnReferenceType.NoKeptCtor.UnusedTypeWithPreserveMethodsAndInterfaceTypeMarked Inheritance.Interfaces.OnReferenceType.NoKeptCtorButInterfaceNeeded.ArrayWithIndexAssignedToReturnValue Inheritance.Interfaces.OnReferenceType.NoKeptCtorButInterfaceNeeded.FieldDowncastedToInterface @@ -282,14 +275,12 @@ Inheritance.Interfaces.OnReferenceType.NoKeptCtorButInterfaceNeeded.ReturnValueD Inheritance.Interfaces.OnReferenceType.ObjectCastedToSecondInterfaceHasMemberRemovedButInterfaceKept Inheritance.Interfaces.OnReferenceType.UnusedComInterfaceIsKept Inheritance.Interfaces.OnReferenceType.UnusedExplicitInterfaceHasMethodPreservedViaXml -Inheritance.Interfaces.OnReferenceType.UnusedInterfaceHasMethodPreservedViaXml Inheritance.Interfaces.OnValueType.NoKeptCtor.InterfaceTypeRemovedWhenOnlyUsedByClassWithOnlyStaticMethod Inheritance.Interfaces.OnValueType.NoKeptCtor.InterfaceTypeRemovedWhenOnlyUsedByClassWithOnlyStaticMethodMultiple Inheritance.Interfaces.OnValueType.StructImplementingInterfaceMethodsNested2 Inheritance.Interfaces.OnValueType.StructUsedFromConcreteTypeHasInterfaceMethodRemoved2 Inheritance.Interfaces.OnValueType.StructWithNestedStructImplementingInterface Inheritance.Interfaces.OnValueType.UnusedExplicitInterfaceHasMethodPreservedViaXml -Inheritance.Interfaces.OnValueType.UnusedInterfaceHasMethodPreservedViaXml Inheritance.Interfaces.RecursiveInterfaces.GenericInterfaceImplementedRecursively Inheritance.Interfaces.RecursiveInterfaces.InterfaceImplementedRecursively Inheritance.Interfaces.RecursiveInterfaces.OverrideOfRecursiveInterfaceIsRemoved @@ -348,34 +339,23 @@ LinkAttributes.TypedArgumentsErrors LinkXml.AssemblyWithPreserveAll LinkXml.CanPreserveAnExportedType LinkXml.CanPreserveExportedTypesUsingRegex -LinkXml.CanPreserveNamespace -LinkXml.CanPreserveTypesUsingRegex LinkXml.EmbeddedLinkXmlFromCopyAssemblyIsProcessed LinkXml.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod LinkXml.EmbeddedLinkXmlUnresolvedReferencesAreReported LinkXml.LinkXmlErrorCases LinkXml.PreserveIndividualMembersOfNonRequiredType -LinkXml.PreserveSecondLevelMethodsOfNonRequiredType -LinkXml.TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved -LinkXml.UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved LinkXml.UnusedEventPreservedByLinkXmlIsKept LinkXml.UnusedFieldPreservedByLinkXmlIsKept LinkXml.UnusedGenericTypeWithPreserveAllHasAllMembersPreserved LinkXml.UnusedInterfaceTypeOnTypeWithPreserveAllIsKept -LinkXml.UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved LinkXml.UnusedMethodPreservedByLinkXmlIsKept -LinkXml.UnusedNestedTypePreservedByLinkXmlIsKept +LinkXml.UnusedNonRequiredTypeIsRemoved LinkXml.UnusedPropertyPreservedByLinkXmlIsKept -LinkXml.UnusedTypeDeclarationPreservedByLinkXmlIsKept -LinkXml.UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved -LinkXml.UnusedTypePreservedByLinkXmlIsKept -LinkXml.UnusedTypePreservedByLinkXmlWithCommentIsKept LinkXml.UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved LinkXml.UnusedTypeWithPreserveAllHasAllMembersPreserved LinkXml.UnusedTypeWithPreserveFieldsHasMethodsRemoved LinkXml.UnusedTypeWithPreserveMethodsHasFieldsRemoved LinkXml.UnusedTypeWithPreserveNothingAndPreserveMembers -LinkXml.UnusedTypeWithPreserveNothingHasMembersRemoved LinkXml.UsedNonRequiredExportedTypeIsKept LinkXml.UsedNonRequiredExportedTypeIsKeptWhenRooted LinkXml.UsedNonRequiredTypeIsKept @@ -389,7 +369,6 @@ Logging.SourceLines Metadata.DebuggerDisplayNamesAreKept Metadata.NamesAreRemoved Metadata.RootAllAssemblyNamesAreKept -Metadata.RootDescriptorNamesAreKept Metadata.RootLibraryAssemblyNamesAreKept Metadata.RootVisibleAssemblyNamesAreKept PreserveDependencies.PreserveDependencyDeprecated @@ -589,7 +568,6 @@ UnreachableBody.OverrideOfAbstractIsStubbedWithUnusedInterface UnreachableBody.SimpleGetter UnreachableBody.SimpleSetter UnreachableBody.WorksWithDynamicDependency -UnreachableBody.WorksWithLinkXml UnreachableBody.WorksWithPreserveDependency Warnings.CanDisableWarnAsError Warnings.CanDisableWarnings diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TrimmingDescriptorNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TrimmingDescriptorNode.cs index 62ce7f689cc1a3..07a3b9aa8d0cdf 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TrimmingDescriptorNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TrimmingDescriptorNode.cs @@ -8,7 +8,12 @@ namespace ILCompiler.DependencyAnalysis { - public class TrimmingDescriptorNode : DependencyNodeCore, ICompilationRootProvider + public class TrimmingDescriptorNode : DependencyNodeCore +#if !ILTRIM +#pragma warning disable SA1001 + , ICompilationRootProvider +#pragma warning restore SA1001 +#endif { private readonly string _fileName; @@ -21,8 +26,12 @@ public override IEnumerable GetStaticDependencies(NodeFacto { using (Stream fs = File.OpenRead(_fileName)) { +#if ILTRIM + return DescriptorMarker.GetDependencies(factory.Logger, factory, fs, default, default, _fileName, factory.Settings.FeatureSettings); +#else var metadataManager = (UsageBasedMetadataManager)factory.MetadataManager; return DescriptorMarker.GetDependencies(metadataManager.Logger, factory, fs, default, default, _fileName, metadataManager.FeatureSwitches); +#endif } } @@ -37,6 +46,8 @@ protected override string GetName(NodeFactory factory) public override bool StaticDependenciesAreComputed => true; public override IEnumerable GetConditionalStaticDependencies(NodeFactory context) => null; public override IEnumerable SearchDynamicDependencies(List> markedNodes, int firstNode, NodeFactory context) => null; +#if !ILTRIM void ICompilationRootProvider.AddCompilationRoots(IRootingServiceProvider rootProvider) => rootProvider.AddCompilationRoot(this, "Descriptor from command line"); +#endif } } diff --git a/src/tools/illink/src/linker/Linker/Driver.cs b/src/tools/illink/src/linker/Linker/Driver.cs index 194bd0f1e2d862..b7ec2cbeacda74 100644 --- a/src/tools/illink/src/linker/Linker/Driver.cs +++ b/src/tools/illink/src/linker/Linker/Driver.cs @@ -44,6 +44,7 @@ using ILogger = ILCompiler.ILogWriter; using DependencyNode = ILCompiler.DependencyAnalysisFramework.DependencyNodeCore; using AssemblyRootNode = ILCompiler.DependencyAnalysis.AssemblyRootNode; +using TrimmingDescriptorNode = ILCompiler.DependencyAnalysis.TrimmingDescriptorNode; #else using Mono.Cecil; using Mono.Linker.Steps; @@ -772,7 +773,9 @@ protected int SetupContext(ILogger? customLogger = null) return -1; } -#if !ILTRIM +#if ILTRIM + inputs.Add(new TrimmingDescriptorNode(xmlFile)); +#else inputs.Add(new ResolveFromXmlStep(File.OpenRead(xmlFile), xmlFile)); #endif continue;