From add01dea4ba3d25f53bd10d7d7e94e446e2a198d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 04:42:11 +0000 Subject: [PATCH 1/4] Add custom attribute marking to Param, GenericParam, GenericParamConstraint, and ManifestResource nodes; update expected failures Add AddDependenciesDueToCustomAttributes calls to ParameterNode, GenericParameterNode, GenericParameterConstraintNode, and ManifestResourceNode so that custom attributes on these metadata tables are correctly preserved during ILTrim. Skip InterfaceImpl, StandAloneSig, and TypeSpec as requested (problematic). Update ILTrimExpectedFailures.txt: remove 20 now-passing tests, add 5 new expected failures (OnlyKeepUsed tests that expect unused attribute removal, not yet implemented in ILTrim). All 915 tests pass (358 passed, 557 skipped, 0 failed). Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/aa76f39a-b849-4fbe-a977-e9c4df50939f Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com> --- .../GenericParameterConstraintNode.cs | 8 ++++- .../TokenBased/GenericParameterNode.cs | 9 ++++- .../TokenBased/ManifestResourceNode.cs | 9 +++-- .../TokenBased/ParameterNode.cs | 10 +++++- .../ILTrim.Tests/ILTrimExpectedFailures.txt | 35 ++++++------------- 5 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterConstraintNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterConstraintNode.cs index e3979602375dfc..b5722f70a252d8 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterConstraintNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterConstraintNode.cs @@ -29,7 +29,13 @@ public GenericParameterConstraintNode(EcmaModule module, GenericParameterConstra public override IEnumerable GetStaticDependencies(NodeFactory factory) { GenericParameterConstraint genericParamConstraint = _module.MetadataReader.GetGenericParameterConstraint(Handle); - yield return new DependencyListEntry(factory.GetNodeForTypeToken(_module, genericParamConstraint.Type), "Parameter constrained to type"); + + DependencyList dependencies = new DependencyList(); + dependencies.Add(factory.GetNodeForTypeToken(_module, genericParamConstraint.Type), "Parameter constrained to type"); + + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, genericParamConstraint.GetCustomAttributes()); + + return dependencies; } protected override EntityHandle WriteInternal(ModuleWritingContext writeContext) diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs index 12a4e6e2db3fb3..c3b395673d4545 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs @@ -28,10 +28,17 @@ public GenericParameterNode(EcmaModule module, GenericParameterHandle handle) public override IEnumerable GetStaticDependencies(NodeFactory factory) { GenericParameter genericParam = _module.MetadataReader.GetGenericParameter(Handle); + + DependencyList dependencies = new DependencyList(); + foreach (var genericParamConstrain in genericParam.GetConstraints()) { - yield return new DependencyListEntry(factory.GenericParameterConstraint(_module, genericParamConstrain), "Generic Parameter Constraint of Generic Parameter"); + dependencies.Add(factory.GenericParameterConstraint(_module, genericParamConstrain), "Generic Parameter Constraint of Generic Parameter"); } + + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, genericParam.GetCustomAttributes()); + + return dependencies; } protected override EntityHandle WriteInternal(ModuleWritingContext writeContext) diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs index b7f6293f7b4376..9df421650aec2c 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs @@ -53,11 +53,15 @@ public override IEnumerable GetStaticDependencies(NodeFacto ms = new UnmanagedMemoryStream(reader.CurrentPointer, length); } - return DescriptorMarker.GetDependencies(factory.Logger, factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), factory.Settings.FeatureSettings); + DependencyList descriptorDependencies = DescriptorMarker.GetDependencies(factory.Logger, factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), factory.Settings.FeatureSettings); + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref descriptorDependencies, factory, _module, resource.GetCustomAttributes()); + return descriptorDependencies; } else { - return null; + DependencyList dependencies = null; + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, resource.GetCustomAttributes()); + return dependencies; } } else @@ -73,6 +77,7 @@ public override IEnumerable GetStaticDependencies(NodeFacto // TODO: Handle AssemblyFile throw new InvalidOperationException(resource.Implementation.Kind.ToString()); } + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, resource.GetCustomAttributes()); return dependencies; } } diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ParameterNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ParameterNode.cs index 9cecda6e8137fb..915e88954a167c 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ParameterNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ParameterNode.cs @@ -20,7 +20,15 @@ public ParameterNode(EcmaModule module, ParameterHandle handle) private ParameterHandle Handle => (ParameterHandle)_handle; - public override IEnumerable GetStaticDependencies(NodeFactory context) => null; + public override IEnumerable GetStaticDependencies(NodeFactory context) + { + DependencyList dependencies = null; + + Parameter parameter = _module.MetadataReader.GetParameter(Handle); + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, context, _module, parameter.GetCustomAttributes()); + + return dependencies; + } public override string ToString() { diff --git a/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt b/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt index 359cb3545127a9..6c9dba6b4c5840 100644 --- a/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt +++ b/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt @@ -1,7 +1,6 @@ Advanced.TypeCheckRemoval Attributes.AssemblyAttributeAccessesMembers Attributes.AssemblyAttributeIsRemovedIfOnlyTypesUsedInAssembly -Attributes.AttributeOnParameterInUsedMethodIsKept Attributes.AttributeOnPreservedTypeWithTypeUsedInConstructorIsKept Attributes.AttributeOnPreservedTypeWithTypeUsedInDifferentNamespaceIsKept Attributes.AttributeOnPreservedTypeWithTypeUsedInFieldIsKept @@ -54,28 +53,32 @@ Attributes.OnlyKeepUsed.AttributeUsedByAttributeIsKept Attributes.OnlyKeepUsed.CanLinkCoreLibrariesWithOnlyKeepUsedAttributes Attributes.OnlyKeepUsed.CoreLibraryUnusedAssemblyAttributesAreRemoved Attributes.OnlyKeepUsed.CoreLibraryUsedAssemblyAttributesAreKept +Attributes.OnlyKeepUsed.MethodWithUnmanagedConstraint Attributes.OnlyKeepUsed.NullableOnConstraintsKept Attributes.OnlyKeepUsed.NullableOnConstraintsRemoved +Attributes.OnlyKeepUsed.UnusedAttributeOnGenericParameterIsRemoved +Attributes.OnlyKeepUsed.UnusedAttributeOnReturnTypeIsRemoved Attributes.OnlyKeepUsed.UnusedAttributeTypeOnAssemblyIsRemoved Attributes.OnlyKeepUsed.UnusedAttributeTypeOnEventIsRemoved Attributes.OnlyKeepUsed.UnusedAttributeTypeOnMethodIsRemoved Attributes.OnlyKeepUsed.UnusedAttributeTypeOnModuleIsRemoved +Attributes.OnlyKeepUsed.UnusedAttributeTypeOnParameterIsRemoved Attributes.OnlyKeepUsed.UnusedAttributeTypeOnPropertyIsRemoved Attributes.OnlyKeepUsed.UnusedAttributeTypeOnTypeIsRemoved +Attributes.OnlyKeepUsed.UnusedAttributeWithTypeForwarderIsRemoved Attributes.OnlyKeepUsed.UnusedDerivedAttributeType -Attributes.OnlyKeepUsed.UsedAttributeTypeOnParameterIsKept Attributes.SecurityAttributesOnUsedMethodAreKept Attributes.SecurityAttributesOnUsedTypeAreKept Attributes.StructLayout.ExplicitClass Attributes.StructLayout.SequentialClass Attributes.TypeUsedInObjectArrayConstructorArgumentOnAttributeIsKept Attributes.TypeWithDynamicInterfaceCastableImplementationAttributeIsKept +BCLFeatures.ETW.CustomEventSource +BCLFeatures.ETW.CustomLibraryEventSource Basic.InstantiatedTypeWithOverridesFromObject Basic.UninvokedInterfaceMemberGetsRemoved Basic.UsedGenericInterfaceIsKept Basic.UsedInterfaceIsKept -BCLFeatures.ETW.CustomEventSource -BCLFeatures.ETW.CustomLibraryEventSource CommandLine.AddCustomStep CommandLine.CustomStepApplyPreserve CommandLine.CustomStepData @@ -95,9 +98,7 @@ DataFlow.AnnotatedMembersAccessedViaUnsafeAccessor DataFlow.ApplyTypeAnnotations DataFlow.AttributeConstructorDataflow DataFlow.AttributeFieldDataflow -DataFlow.AttributePrimaryConstructorDataflow DataFlow.AttributePropertyDataflow -DataFlow.ByRefDataflow DataFlow.CompilerGeneratedCodeAccessedViaReflection DataFlow.CompilerGeneratedCodeDataflow DataFlow.CompilerGeneratedTypes @@ -113,18 +114,16 @@ DataFlow.ExtensionMembersDataFlow DataFlow.FeatureCheckDataFlow DataFlow.FeatureGuardAttributeDataFlow DataFlow.FieldDataFlow -DataFlow.FieldKeyword DataFlow.GenericParameterDataFlow DataFlow.GenericParameterDataFlowMarking DataFlow.GenericParameterWarningLocation -DataFlow.InterfaceImplementedThroughBaseValidation DataFlow.IReflectDataflow +DataFlow.InterfaceImplementedThroughBaseValidation DataFlow.LocalDataFlowKeptMembers DataFlow.MemberTypes DataFlow.MemberTypesAllOnCopyAssembly DataFlow.MethodParametersDataFlow DataFlow.ModifierDataFlow -DataFlow.NullableAnnotations DataFlow.ObjectGetTypeDataflow DataFlow.PropertyDataFlow DataFlow.RuntimeAsyncMethods @@ -164,12 +163,12 @@ FeatureSettings.FeatureSubstitutionsInvalid FeatureSettings.FeatureSubstitutionsNested Generics.ArrayVariantCasting Generics.GenericConstraints +Generics.GenericConstraints Generics.InstantiatedGenericEquality Generics.MdArrayVariantCasting Generics.MethodWithParameterWhichHasGenericParametersAndOverrideUsesADifferentNameForGenericParameter Generics.MethodWithParameterWhichHasGenericParametersAndOverrideUsesADifferentNameForGenericParameterNestedCase Generics.MethodWithParameterWhichHasGenericParametersAndOverrideUsesADifferentNameForGenericParameterNestedCase2 -Generics.GenericConstraints Generics.UnresolvedGenerics Generics.VariantCasting Inheritance.AbstractClasses.NoKeptCtor.OverrideRemoval.CanDisableOverrideRemoval @@ -316,7 +315,6 @@ LinkAttributes.LinkAttributeErrorCases LinkAttributes.LinkerAttributeRemoval LinkAttributes.LinkerAttributeRemovalAndPreserveAssembly LinkAttributes.LinkerAttributeRemovalConditional -LinkAttributes.OverrideAttributeRemoval LinkAttributes.TypedArguments LinkAttributes.TypedArgumentsErrors LinkXml.CanPreserveAnExportedType @@ -369,22 +367,13 @@ References.MissingReferenceInUsedCodePath References.ReferenceWithEntryPoint Reflection.ActivatorCreateInstance Reflection.AssemblyImportedViaReflectionWithDerivedType -Reflection.ConstructorsUsedViaReflection -Reflection.ConstructorUsedViaReflection Reflection.CoreLibMessages Reflection.EventHanderTypeGetInvokeMethod Reflection.EventsUsedViaReflection Reflection.ExpressionCallString -Reflection.ExpressionFieldString -Reflection.ExpressionPropertyString -Reflection.FieldsUsedViaReflection Reflection.IsAssignableFrom -Reflection.MembersUsedViaReflection -Reflection.MemberUsedViaReflection -Reflection.MethodsUsedViaReflection Reflection.MethodUsedViaReflection -Reflection.NestedTypesUsedViaReflection -Reflection.NestedTypeUsedViaReflection +Reflection.MethodsUsedViaReflection Reflection.ObjectGetType Reflection.ObjectGetTypeLibraryMode Reflection.ParametersUsedViaReflection @@ -392,10 +381,8 @@ Reflection.PropertiesUsedViaReflection Reflection.PropertyUsedViaReflection Reflection.RunClassConstructor Reflection.RuntimeReflectionExtensionsCalls -Reflection.TypeDelegator Reflection.TypeHierarchyLibraryModeSuppressions Reflection.TypeHierarchyReflectionWarnings -Reflection.TypeHierarchySuppressions Reflection.TypeMap Reflection.TypeMapEntryAssembly Reflection.TypeUsedViaReflection @@ -458,8 +445,6 @@ Symbols.ReferenceWithPortablePdbCopyActionAndSymbolLinkingEnabled TestFramework.VerifyAttributesInAssemblyWorks TestFramework.VerifyAttributesInAssemblyWorksWithStrings TestFramework.VerifyLocalsAreChanged -TopLevelStatements.BasicDataFlow -TopLevelStatements.InvalidAnnotations TypeForwarding.AttributeArgumentForwarded TypeForwarding.AttributeArgumentForwardedWithCopyAction TypeForwarding.AttributeEnumArgumentForwardedCopyUsedWithSweptForwarder From 75f3d8ba26372169a5ddb2de71cdeb4b9e1086df Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 05:03:49 +0000 Subject: [PATCH 2/4] Fix spurious diffs in ILTrimExpectedFailures.txt by preserving original line ordering Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/ca9868d9-9404-4b98-8ba9-a2d5e04076d7 Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com> --- .../tools/ILTrim.Tests/ILTrimExpectedFailures.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt b/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt index 6c9dba6b4c5840..4f03cadcadc2be 100644 --- a/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt +++ b/src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt @@ -73,12 +73,12 @@ Attributes.StructLayout.ExplicitClass Attributes.StructLayout.SequentialClass Attributes.TypeUsedInObjectArrayConstructorArgumentOnAttributeIsKept Attributes.TypeWithDynamicInterfaceCastableImplementationAttributeIsKept -BCLFeatures.ETW.CustomEventSource -BCLFeatures.ETW.CustomLibraryEventSource Basic.InstantiatedTypeWithOverridesFromObject Basic.UninvokedInterfaceMemberGetsRemoved Basic.UsedGenericInterfaceIsKept Basic.UsedInterfaceIsKept +BCLFeatures.ETW.CustomEventSource +BCLFeatures.ETW.CustomLibraryEventSource CommandLine.AddCustomStep CommandLine.CustomStepApplyPreserve CommandLine.CustomStepData @@ -117,8 +117,8 @@ DataFlow.FieldDataFlow DataFlow.GenericParameterDataFlow DataFlow.GenericParameterDataFlowMarking DataFlow.GenericParameterWarningLocation -DataFlow.IReflectDataflow DataFlow.InterfaceImplementedThroughBaseValidation +DataFlow.IReflectDataflow DataFlow.LocalDataFlowKeptMembers DataFlow.MemberTypes DataFlow.MemberTypesAllOnCopyAssembly @@ -163,12 +163,12 @@ FeatureSettings.FeatureSubstitutionsInvalid FeatureSettings.FeatureSubstitutionsNested Generics.ArrayVariantCasting Generics.GenericConstraints -Generics.GenericConstraints Generics.InstantiatedGenericEquality Generics.MdArrayVariantCasting Generics.MethodWithParameterWhichHasGenericParametersAndOverrideUsesADifferentNameForGenericParameter Generics.MethodWithParameterWhichHasGenericParametersAndOverrideUsesADifferentNameForGenericParameterNestedCase Generics.MethodWithParameterWhichHasGenericParametersAndOverrideUsesADifferentNameForGenericParameterNestedCase2 +Generics.GenericConstraints Generics.UnresolvedGenerics Generics.VariantCasting Inheritance.AbstractClasses.NoKeptCtor.OverrideRemoval.CanDisableOverrideRemoval @@ -372,8 +372,8 @@ Reflection.EventHanderTypeGetInvokeMethod Reflection.EventsUsedViaReflection Reflection.ExpressionCallString Reflection.IsAssignableFrom -Reflection.MethodUsedViaReflection Reflection.MethodsUsedViaReflection +Reflection.MethodUsedViaReflection Reflection.ObjectGetType Reflection.ObjectGetTypeLibraryMode Reflection.ParametersUsedViaReflection From b1c0cfd4a3945b7665fe7e2870ba712fd09a5f57 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 06:35:33 +0000 Subject: [PATCH 3/4] Refactor ManifestResourceNode to call AddDependenciesDueToCustomAttributes only once Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/61b20371-b1f0-4b46-8e29-d5211b24471a Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com> --- .../TokenBased/ManifestResourceNode.cs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs index 9df421650aec2c..b137e947bb69bc 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs @@ -32,6 +32,8 @@ public override IEnumerable GetStaticDependencies(NodeFacto _skipWritingResource = false; + DependencyList dependencies = null; + if (resource.Implementation.IsNil) { string resourceName = _module.MetadataReader.GetString(resource.Name); @@ -53,20 +55,12 @@ public override IEnumerable GetStaticDependencies(NodeFacto ms = new UnmanagedMemoryStream(reader.CurrentPointer, length); } - DependencyList descriptorDependencies = DescriptorMarker.GetDependencies(factory.Logger, factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), factory.Settings.FeatureSettings); - CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref descriptorDependencies, factory, _module, resource.GetCustomAttributes()); - return descriptorDependencies; - } - else - { - DependencyList dependencies = null; - CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, resource.GetCustomAttributes()); - return dependencies; + dependencies = DescriptorMarker.GetDependencies(factory.Logger, factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), factory.Settings.FeatureSettings); } } else { - DependencyList dependencies = new(); + dependencies = new(); switch (resource.Implementation.Kind) { case HandleKind.AssemblyReference: @@ -77,9 +71,10 @@ public override IEnumerable GetStaticDependencies(NodeFacto // TODO: Handle AssemblyFile throw new InvalidOperationException(resource.Implementation.Kind.ToString()); } - CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, resource.GetCustomAttributes()); - return dependencies; } + + CustomAttributeNode.AddDependenciesDueToCustomAttributes(ref dependencies, factory, _module, resource.GetCustomAttributes()); + return dependencies; } public override void BuildTokens(TokenMap.Builder builder) From eb50492a92958ae3404238b0ef65a38b3c5caa1c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 27 Apr 2026 00:34:20 +0000 Subject: [PATCH 4/4] Apply code review feedback: lazy-init DependencyList and remove early return bypassing CA marking Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/25d36104-0c73-4530-85ca-cdf871c5c846 Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com> --- .../TokenBased/GenericParameterNode.cs | 3 ++- .../TokenBased/ManifestResourceNode.cs | 22 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs index c3b395673d4545..74dcb9d7c262f8 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/GenericParameterNode.cs @@ -29,10 +29,11 @@ public override IEnumerable GetStaticDependencies(NodeFacto { GenericParameter genericParam = _module.MetadataReader.GetGenericParameter(Handle); - DependencyList dependencies = new DependencyList(); + DependencyList dependencies = null; foreach (var genericParamConstrain in genericParam.GetConstraints()) { + dependencies ??= new DependencyList(); dependencies.Add(factory.GenericParameterConstraint(_module, genericParamConstrain), "Generic Parameter Constraint of Generic Parameter"); } diff --git a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs index b137e947bb69bc..3f55462eea6f3c 100644 --- a/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs +++ b/src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/ManifestResourceNode.cs @@ -42,20 +42,20 @@ public override IEnumerable GetStaticDependencies(NodeFacto string assemblyName = _module.Assembly.GetName().Name; _skipWritingResource = factory.Settings.Optimizations.IsEnabled(CodeOptimizations.RemoveDescriptors, assemblyName); - if (factory.Settings.IgnoreDescriptors) - return null; + if (!factory.Settings.IgnoreDescriptors) + { + PEMemoryBlock resourceDirectory = _module.PEReader.GetSectionData(_module.PEReader.PEHeaders.CorHeader.ResourcesDirectory.RelativeVirtualAddress); + BlobReader reader = resourceDirectory.GetReader((int)resource.Offset, resourceDirectory.Length - (int)resource.Offset); + int length = (int)reader.ReadUInt32(); - PEMemoryBlock resourceDirectory = _module.PEReader.GetSectionData(_module.PEReader.PEHeaders.CorHeader.ResourcesDirectory.RelativeVirtualAddress); - BlobReader reader = resourceDirectory.GetReader((int)resource.Offset, resourceDirectory.Length - (int)resource.Offset); - int length = (int)reader.ReadUInt32(); + UnmanagedMemoryStream ms; + unsafe + { + ms = new UnmanagedMemoryStream(reader.CurrentPointer, length); + } - UnmanagedMemoryStream ms; - unsafe - { - ms = new UnmanagedMemoryStream(reader.CurrentPointer, length); + dependencies = DescriptorMarker.GetDependencies(factory.Logger, factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), factory.Settings.FeatureSettings); } - - dependencies = DescriptorMarker.GetDependencies(factory.Logger, factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), factory.Settings.FeatureSettings); } } else