Infinite Recursion When Linking
- Dominant language
- C#
- Stars
- 392
- Forks
- 128
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 2
Description
I am trying to use the dotnet/performance repo to run some wasm-aot programs. And when I do, I am getting this stack trace that looks like an infinite recursion:
``` at Mono.Linker.Driver.Main(System.String[])
at Mono.Linker.Driver.Run(Mono.Linker.ILogger)
at Mono.Linker.Pipeline.Process(Mono.Linker.LinkContext)
at Mono.Linker.Pipeline.ProcessStep(Mono.Linker.LinkContext, Mono.Linker.Steps.IStep)
at Mono.Linker.Steps.MarkStep.Process(Mono.Linker.LinkContext)
at Mono.Linker.Steps.MarkStep.Initialize()
at Mono.Linker.Steps.MarkStep.ProcessMarkedPending()
at Mono.Linker.Steps.MarkStep.MarkModule(Mono.Cecil.ModuleDefinition, Mono.Linker.DependencyInfo)
at Mono.Linker.Steps.MarkStep.MarkAssembly(Mono.Cecil.AssemblyDefinition, Mono.Linker.DependencyInfo)
at Mono.Linker.Steps.MarkStep.MarkEntireAssembly(Mono.Cecil.AssemblyDefinition)
at Mono.Linker.Steps.MarkStep.MarkCustomAttributes(Mono.Cecil.ICustomAttributeProvider, Mono.Linker.DependencyInfo ByRef, Mono.Cecil.IMemberDefinition)
at Mono.Cecil.TypeReference.Resolve()
at Mono.Cecil.ModuleDefinition.Resolve(Mono.Cecil.TypeReference)
at Mono.Cecil.MetadataResolver.Resolve(Mono.Cecil.TypeReference)
at Mono.Cecil.MetadataResolver.GetType(Mono.Cecil.ModuleDefinition, Mono.Cecil.TypeReference)
at Mono.Cecil.ExportedType.Resolve()
... Repeats ...
at Mono.Cecil.ModuleDefinition.GetType(System.String, System.String)
at Mono.Cecil.TypeDefinitionCollection.GetType(System.String, System.String)
at System.Collections.Generic.Dictionary`2[[Mono.Cecil.Metadata.Row`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], Mono.Cecil, Version=0.11.3.0, Culture=neutral, PublicKeyToken=50cebf1cceb9d05e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].TryGetValue(Mono.Cecil.Metadata.Row`2, System.__Canon ByRef)
at System.Collections.Generic.Dictionary`2[[Mono.Cecil.Metadata.Row`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], Mono.Cecil, Version=0.11.3.0, Culture=neutral, PublicKeyToken=50cebf1cceb9d05e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FindValue(Mono.Cecil.Metadata.Row`2)
at Mono.Cecil.Metadata.RowEqualityComparer.GetHashCode(Mono.Cecil.Metadata.Row`2)
Stack overflow.
```
I have a repro for this, but because it only comes up in the project dotnet/performance generates (not dotnet performacne itself) , it is a little complicated. I am working on getting a simpler repro.
For now, what I've got is:
1. Download dotnet/runtime, build it for wasm:
```git clone git@github.com:dotnet/runtime.git```
```cd runtime```
```dotnet build -c Release -subset mono+libs -arch Browser -os wasm```
2. Download dotnet/performance; run the microbenchmarks project (in src/benchmarks/micro) like so:
```git clone git@github.com:dotnet/performance.git```
``` cd performance/src/benchmarks/micro```
```dotnet run --configuration Release --framework net6.0 --runtimes wasm --aotcompilermode wasm --runtimeSrcDir . --filter "*ByteMark*"```
You can use the `--keepfiles` option on that last `dotnet run` command to preserve the temporary project it generates, and the output shows all commands it runs on that project. This would probably be helpful for debugging.
It this a known error? I thought it might be some type of recursive type forwarding between assemblies, but couldn't find any typeforwarding annotations in the dotnet/performance code.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.