Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

linker: NRE in Mono.Linker.TypeMapInfo.MapOverrides #2789

Closed
radical opened this issue May 10, 2022 · 5 comments
Closed

linker: NRE in Mono.Linker.TypeMapInfo.MapOverrides #2789

radical opened this issue May 10, 2022 · 5 comments

Comments

@radical
Copy link
Member

radical commented May 10, 2022

Hit on dotnet/runtime#68988 , build:

##[error]/_/src/libraries/System.Private.CoreLib/src/System/Reflection/AssemblyName.cs(192,13): error IL1005: (NETCORE_ENGINEERING_TELEMETRY=Build) System.Reflection.AssemblyName.GetAssemblyName(String): Error processing method 'System.Reflection.AssemblyName.InitGetAssemblyName()' in assembly 'System.Private.CoreLib.dll'.
  Mono.Linker.LinkerFatalErrorException: /_/src/libraries/System.Private.CoreLib/src/System/Reflection/AssemblyName.cs(192,13): error IL1005: System.Reflection.AssemblyName.GetAssemblyName(String): Error processing method 'System.Reflection.AssemblyName.InitGetAssemblyName()' in assembly 'System.Private.CoreLib.dll'.
   ---> System.NullReferenceException: Object reference not set to an instance of an object.
     at Mono.Linker.TypeMapInfo.MapOverrides(MethodDefinition method)
     at Mono.Linker.TypeMapInfo.MapVirtualMethods(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.MapType(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.MapType(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.EnsureProcessed(AssemblyDefinition assembly)
     at Mono.Linker.TypeMapInfo.GetBaseMethods(MethodDefinition method)
     at Mono.Linker.Steps.MarkStep.IsMethodNeededByTypeDueToPreservedScope(MethodDefinition method)
     at Mono.Linker.Steps.MarkStep.MarkMethodsIf(Collection`1 methods, Func`2 predicate, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference, DependencyInfo reason, Nullable`1 origin)
     at Mono.Linker.Steps.MarkStep.MarkTypeVisibleToReflection(TypeReference type, TypeDefinition definition, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Dataflow.ReflectionMarker.TryResolveTypeNameAndMark(String typeName, MessageOrigin origin, Boolean needsAssemblyName, TypeDefinition& type)
     at ILLink.Shared.TrimAnalysis.RequireDynamicallyAccessedMembersAction.TryResolveTypeNameAndMark(String typeName, Boolean needsAssemblyName, TypeProxy& type)
     at ILLink.Shared.TrimAnalysis.HandleCallAction.Invoke(MethodProxy calledMethod, ValueSet`1 instanceValue, IReadOnlyList`1 argumentValues, ValueSet`1& methodReturnValue, IntrinsicId& intrinsicId)
     at Mono.Linker.Dataflow.ReflectionMethodBodyScanner.HandleCall(MethodBody callingMethodBody, MethodReference calledMethod, Instruction operation, ValueNodeList methodParams, ValueSet`1& methodReturnValue)
     at Mono.Linker.Dataflow.MethodBodyScanner.HandleCall(MethodBody callingMethodBody, Instruction operation, Stack`1 currentStack, Int32 curBasicBlock)
     at Mono.Linker.Dataflow.MethodBodyScanner.Scan(MethodBody methodBody)
     at Mono.Linker.Dataflow.ReflectionMethodBodyScanner.ScanAndProcessReturnValue(MethodBody methodBody)
     at Mono.Linker.Steps.MarkStep.MarkReflectionLikeDependencies(MethodBody body, Boolean requiresReflectionMethodBodyScanner)
     at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
     at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Steps.MarkStep.ProcessQueue()
     --- End of inner exception stack trace ---
     at Mono.Linker.Steps.MarkStep.ProcessQueue()
     at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
     at Mono.Linker.Steps.MarkStep.Process()
     at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
     at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
     at Mono.Linker.Pipeline.Process(LinkContext context)
     at Mono.Linker.Driver.Run(ILogger customLogger, Boolean throwOnFatalLinkerException)
@ghost
Copy link

ghost commented May 10, 2022

Tagging subscribers to 'linkable-framework': @eerhardt, @vitek-karas, @LakshanF, @sbomer, @joperezr
See info in area-owners.md if you want to be subscribed.

Issue Details

Hit on dotnet/runtime#68988 , build:

##[error]/_/src/libraries/System.Private.CoreLib/src/System/Reflection/AssemblyName.cs(192,13): error IL1005: (NETCORE_ENGINEERING_TELEMETRY=Build) System.Reflection.AssemblyName.GetAssemblyName(String): Error processing method 'System.Reflection.AssemblyName.InitGetAssemblyName()' in assembly 'System.Private.CoreLib.dll'.
  Mono.Linker.LinkerFatalErrorException: /_/src/libraries/System.Private.CoreLib/src/System/Reflection/AssemblyName.cs(192,13): error IL1005: System.Reflection.AssemblyName.GetAssemblyName(String): Error processing method 'System.Reflection.AssemblyName.InitGetAssemblyName()' in assembly 'System.Private.CoreLib.dll'.
   ---> System.NullReferenceException: Object reference not set to an instance of an object.
     at Mono.Linker.TypeMapInfo.MapOverrides(MethodDefinition method)
     at Mono.Linker.TypeMapInfo.MapVirtualMethods(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.MapType(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.MapType(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.EnsureProcessed(AssemblyDefinition assembly)
     at Mono.Linker.TypeMapInfo.GetBaseMethods(MethodDefinition method)
     at Mono.Linker.Steps.MarkStep.IsMethodNeededByTypeDueToPreservedScope(MethodDefinition method)
     at Mono.Linker.Steps.MarkStep.MarkMethodsIf(Collection`1 methods, Func`2 predicate, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference, DependencyInfo reason, Nullable`1 origin)
     at Mono.Linker.Steps.MarkStep.MarkTypeVisibleToReflection(TypeReference type, TypeDefinition definition, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Dataflow.ReflectionMarker.TryResolveTypeNameAndMark(String typeName, MessageOrigin origin, Boolean needsAssemblyName, TypeDefinition& type)
     at ILLink.Shared.TrimAnalysis.RequireDynamicallyAccessedMembersAction.TryResolveTypeNameAndMark(String typeName, Boolean needsAssemblyName, TypeProxy& type)
     at ILLink.Shared.TrimAnalysis.HandleCallAction.Invoke(MethodProxy calledMethod, ValueSet`1 instanceValue, IReadOnlyList`1 argumentValues, ValueSet`1& methodReturnValue, IntrinsicId& intrinsicId)
     at Mono.Linker.Dataflow.ReflectionMethodBodyScanner.HandleCall(MethodBody callingMethodBody, MethodReference calledMethod, Instruction operation, ValueNodeList methodParams, ValueSet`1& methodReturnValue)
     at Mono.Linker.Dataflow.MethodBodyScanner.HandleCall(MethodBody callingMethodBody, Instruction operation, Stack`1 currentStack, Int32 curBasicBlock)
     at Mono.Linker.Dataflow.MethodBodyScanner.Scan(MethodBody methodBody)
     at Mono.Linker.Dataflow.ReflectionMethodBodyScanner.ScanAndProcessReturnValue(MethodBody methodBody)
     at Mono.Linker.Steps.MarkStep.MarkReflectionLikeDependencies(MethodBody body, Boolean requiresReflectionMethodBodyScanner)
     at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
     at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Steps.MarkStep.ProcessQueue()
     --- End of inner exception stack trace ---
     at Mono.Linker.Steps.MarkStep.ProcessQueue()
     at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
     at Mono.Linker.Steps.MarkStep.Process()
     at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
     at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
     at Mono.Linker.Pipeline.Process(LinkContext context)
     at Mono.Linker.Driver.Run(ILogger customLogger, Boolean throwOnFatalLinkerException)
Author: radical
Assignees: -
Labels:

linkable-framework

Milestone: -

@marek-safar
Copy link
Contributor

/cc @vitek-karas @sbomer

@marek-safar marek-safar added this to the .NET 7.0 milestone May 10, 2022
@vitek-karas
Copy link
Member

@radical does it repro still? The link to the failing build seems broken (I can't open that page, AzDo errors), but honestly looking around the code we would need a repro to diagnose this - it's really weird.

@radical
Copy link
Member Author

radical commented May 28, 2022

Hit this again - build:

/_/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/ReferenceConverter.cs(67,25): error IL1005: System.ComponentModel.ReferenceConverter.ConvertFrom(ITypeDescriptorContext, CultureInfo, Object): Error processing method 'System.ComponentModel.IContainer.Components.get' in assembly 'System.ComponentModel.Primitives.dll'. [D:\a\_work\1\s\src\libraries\Microsoft.Extensions.Configuration.Json\tests\Microsoft.Extensions.Configuration.Json.Tests.csproj]
##[error]/_/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/ReferenceConverter.cs(67,25): error IL1005: (NETCORE_ENGINEERING_TELEMETRY=Build) System.ComponentModel.ReferenceConverter.ConvertFrom(ITypeDescriptorContext, CultureInfo, Object): Error processing method 'System.ComponentModel.IContainer.Components.get' in assembly 'System.ComponentModel.Primitives.dll'.
  Mono.Linker.LinkerFatalErrorException: /_/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/ReferenceConverter.cs(67,25): error IL1005: System.ComponentModel.ReferenceConverter.ConvertFrom(ITypeDescriptorContext, CultureInfo, Object): Error processing method 'System.ComponentModel.IContainer.Components.get' in assembly 'System.ComponentModel.Primitives.dll'.
   ---> System.NullReferenceException: Object reference not set to an instance of an object.
     at Mono.Linker.TypeMapInfo.MapOverrides(MethodDefinition method)
     at Mono.Linker.TypeMapInfo.MapVirtualMethods(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.MapType(TypeDefinition type)
     at Mono.Linker.TypeMapInfo.EnsureProcessed(AssemblyDefinition assembly)
     at Mono.Linker.TypeMapInfo.GetBaseMethods(MethodDefinition method)
     at Mono.Linker.Steps.MarkStep.IsMethodNeededByTypeDueToPreservedScope(MethodDefinition method)
     at Mono.Linker.Steps.MarkStep.MarkMethodsIf(Collection`1 methods, Func`2 predicate, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference, DependencyInfo reason, Nullable`1 origin)
     at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference, DependencyInfo reason, Nullable`1 origin)
     at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method, DependencyInfo& reason, MessageOrigin& origin)
     at Mono.Linker.Steps.MarkStep.ProcessQueue()
     --- End of inner exception stack trace ---
     at Mono.Linker.Steps.MarkStep.ProcessQueue()
     at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
     at Mono.Linker.Steps.MarkStep.Process()
     at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
     at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
     at Mono.Linker.Pipeline.Process(LinkContext context)
     at Mono.Linker.Driver.Run(ILogger customLogger, Boolean throwOnFatalLinkerException)

@sbomer
Copy link
Member

sbomer commented Jul 25, 2022

I suspect this is another case of a GC hole causing a linker crash. Closing as a duplicate of dotnet/runtime#69536, but please re-open if this shows up again.

@sbomer sbomer closed this as completed Jul 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

No branches or pull requests

4 participants