dotnet / fsharp

The F# compiler, F# core library, F# language service, and F# tooling integration for Visual Studio
https://dotnet.microsoft.com/languages/fsharp
MIT License
3.91k stars 785 forks source link

Wrong emitted metadata for nested generic types #17797

Open auduchinok opened 1 month ago

auduchinok commented 1 month ago

The generated types for (at least some) closures miss type parameters from their containing types. When defining a nested type, it should redefine all type parameters from its containing type (see I.10.7.1 from ECMA-335).

Closures like Internal.Utilities.Collections.AgedLookup`3+-ctor@25-5 miss their parent's type parameters and have only 1 of the 4 type parameters needed. This was caught by an assert in R#/Rider metadata reading code. We're disabling the assert for now, but it looks like the code generation should be fixed on the F# compiler side.

vzarytovskii commented 1 month ago

Try with realsig-

auduchinok commented 1 month ago

@vzarytovskii Can confirm it helps, thanks!

vzarytovskii commented 1 month ago

@vzarytovskii Can confirm it helps, thanks!

Thanks. We turned it off by default in rc2, but compiler itself still builds with realsig

KevinRansom commented 1 month ago

Yes this is real ... needs fixing.