You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
NativeAot produces warning for generic instantiation which can't be suppressed #77455
Instantiating a generic which has DynamicallyAccessedMemberTypes requirements with a type that has members marked RequiresUnreferencedCode correctly produces a warning. However, the warning is not suppressible by RequiresUnreferencedCodeAttribute or UnconditionalSuppressMessageAttribute.
The problem is that the message origin for the warning is an InstantiatedMethod, a type system entity that isn't associated with the calling context. Encountered while porting compiler-generated code tests from the linker as part of #68786.
RequiresUnreferencedCodeAttribute or UnconditionalSuppressMessageAttribute on Test should suppress the warning.
Actual behavior
ILC : Trim analysis warning IL2026: Program.MethodWithGenericWhichRequiresMethods<TypeWithMethodWithRequires>(): Using member 'TypeWithMethodWithRequires.MethodWithRequires()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
This issue was caused by last line with call to GetFlowDependenciesForInstantiation which is called inside MethodGenericDictionaryNode.ComputeNonRelocationBasedDependencies
instantiated generic method variable with value Program.MethodWithGenericWhichRequiresMethods<TypeWithMethodWithRequires>() was given as source for depenndency flow analysis which is incorect because actual source of the call is Test method. From my limited understanding when MethodGenericDictionaryNode created information about call site is lost.
Activity
kant2002 commentedon Jan 3, 2023
This issue was caused by last line with call to
GetFlowDependenciesForInstantiationwhich is called insideMethodGenericDictionaryNode.ComputeNonRelocationBasedDependenciesruntime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/UsageBasedMetadataManager.cs
Lines 800 to 809 in 2619d1c
instantiated generic
methodvariable with valueProgram.MethodWithGenericWhichRequiresMethods<TypeWithMethodWithRequires>()was given as source for depenndency flow analysis which is incorect because actualsourceof the call isTestmethod. From my limited understanding whenMethodGenericDictionaryNodecreated information about call site is lost.vitek-karas commentedon Jan 30, 2023
The fix has been reverted due to #81358.
Fix generic parameter data flow validation in NativeAOT (#82392)