dotnet / linker

387 stars 126 forks source link

Fatal error in IL Linker #3184

Closed arivoir closed 1 year ago

arivoir commented 1 year ago

Description

When building a net7 Android application in Release mode I get 4 errors all similar saying

Unhandled exception. System.InvalidOperationException: Collection was modified; enumeration operation may not execute.

Steps to Reproduce

Create Android native project targeting net7 Build it in Release configuration

Link to public reproduction project repository

No demo

Version with bug

7.0 (current)

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

Microsoft Visual Studio Enterprise 2022 (64-bit) - Current Version 17.4.2

Did you find any workaround?

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <RunAOTCompilation>False</RunAOTCompilation>
    <PublishTrimmed>False</PublishTrimmed>
</PropertyGroup>

Relevant log output

1>Fatal error in IL Linker
1>Unhandled exception. System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
1>   at Mono.Linker.Steps.MarkStep.IsMethodNeededByInstantiatedTypeDueToPreservedScope(MethodDefinition method)
1>   at Mono.Linker.Steps.MarkStep.GetRequiredMethodsForInstantiatedType(TypeDefinition type)+MoveNext()
1>   at Mono.Linker.Steps.MarkStep.MarkRequirementsForInstantiatedTypes(TypeDefinition type)
1>   at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method, DependencyInfo& reason, MessageOrigin& origin)
1>   at Mono.Linker.Steps.MarkStep.ProcessQueue()
1>   at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
1>   at Mono.Linker.Steps.MarkStep.Process()
1>   at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
1>   at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
1>   at Mono.Linker.Pipeline.Process(LinkContext context)
1>   at Mono.Linker.Driver.Run(ILogger customLogger)
1>   at Mono.Linker.Driver.Main(String[] args)
mattleibow commented 1 year ago

@jonathanpeppers thoughts?

jonathanpeppers commented 1 year ago

I think we just move this to dotnet/linker, this is where the method above is:

https://github.com/dotnet/linker/blob/beb6d3b60770d2b5c86488b25e1c9426b5d6d4c5/src/linker/Linker.Steps/MarkStep.cs#L2408

marek-safar commented 1 year ago

Duplicate of #3112