-
Notifications
You must be signed in to change notification settings - Fork 832
Description
When compiling using dotnet, I am running into a stack overflow exception. It appears to be related to the FSharp.Data.SqlProvider package, but regardless of what a 3rd party library does, I see this as a bug in fsc.exe
I understand that fsharp does not quite yet support type providers in netcore, I hope that this issue can help to work towards it working. Side note, could someone provide instructions to getting netcore fsc working on 2.0.0? I would attempt to troubleshoot further and PR this if I could compile the compiler.
Repro steps
- Download FSharp.Data.SqlProvider.dll from nuget, and place it in an accessible location.
- Create a file named test.fs that just has
module x\rlet x = ""or some such.
Run the following command:
dotnet /usr/share/dotnet/sdk/2.0.0/FSharp/fsc.exe --noframework -r:/usr/share/dotnet/sdk/NuGetFallbackFolder/netstandard.library/2.0.0/build/netstandard2.0/ref/mscorlib.dll -r:/usr/share/dotnet/sdk/NuGetFallbackFolder/netstandard.library/2.0.0/build/netstandard2.0/ref/System.Runtime.dll -r:/usr/share/dotnet/sdk/NuGetFallbackFolder/netstandard.library/2.0.0/build/netstandard2.0/ref/netstandard.dll -r:/home/xenocons/.nuget/packages/sqlprovider/1.1.11/lib/FSharp.Data.SqlProvider.dll test.fs
Related information
Provide any related information
- Debian 9
- .NET Core 2.0.0
Stacktrace
FSC doesnt seem to produce a stacktrace, so I used lldb to get the below, this seems to repeat constantly and chew up the stack, it looks like perhaps assembly resolution is occurring in an endless loop.
00007FFFFFFEAC58 00007ffff6344f07 [HelperMethodFrame_PROTECTOBJ: 00007ffffffeac58] System.Reflection.RuntimeAssembly._nLoad(System.Reflection.AssemblyName, System.String, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, IntPtr, Boolean, Boolean, Boolean, IntPtr)
00007FFFFFFEAD90 00007FFF7CB2606E System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(System.Reflection.AssemblyName, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, IntPtr, Boolean, Boolean, IntPtr)
00007FFFFFFEADF0 00007FFF7CB52B48 System.Reflection.Assembly.Load(System.Reflection.AssemblyName, IntPtr)
00007FFFFFFEAE30 00007FFF7CBB14A4 System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyName(System.Reflection.AssemblyName)
00007FFFFFFEAE40 00007FFF7E6C0091 Microsoft.FSharp.Core.ReflectionAdapters+CustomAssemblyResolver.Load(System.Reflection.AssemblyName)
00007FFFFFFEAE50 00007FFF7CBB1400 System.Runtime.Loader.AssemblyLoadContext.ResolveUsingLoad(System.Reflection.AssemblyName)
00007FFFFFFEAE80 00007FFF7CBB123C System.Runtime.Loader.AssemblyLoadContext.Resolve(IntPtr, System.Reflection.AssemblyName)
00007FFFFFFEB3C0 00007ffff6344f07 [GCFrame: 00007ffffffeb3c0]
Before the endless loop we see this:
00007FFFFFFFBD78 00007ffff6344f07 [InlinedCallFrame: 00007fffffffbd78] System.Reflection.RuntimeAssembly.GetExportedTypes(System.Reflection.RuntimeAssembly, System.Runtime.CompilerServices.ObjectHandleOnStack)
00007FFFFFFFBD78 00007fff7cc54b22 [InlinedCallFrame: 00007fffffffbd78] System.Reflection.RuntimeAssembly.GetExportedTypes(System.Reflection.RuntimeAssembly, System.Runtime.CompilerServices.ObjectHandleOnStack)
00007FFFFFFFBD70 00007FFF7CC54B22 DomainNeutralILStubClass.IL_STUB_PInvoke(System.Reflection.RuntimeModule, System.Runtime.CompilerServices.ObjectHandleOnStack)
00007FFFFFFFBE00 00007FFF7CB25BDA System.Reflection.RuntimeAssembly.GetExportedTypes()
00007FFFFFFFBE20 00007FFF7E4E874E Microsoft.FSharp.Compiler.ExtensionTyping.GetTypeProviderImplementationTypes(System.String, System.String, range)
00007FFFFFFFBE80 00007FFF7E4EED87 Microsoft.FSharp.Compiler.ExtensionTyping+GetTypeProvidersOfAssembly@160.GenerateNext(System.Collections.Generic.IEnumerable`1<System.Tuple`2<Microsoft.FSharp.Core.CompilerServices.ITypeProvider,ILScopeRef>> ByRef)
00007FFFFFFFBEF0 00007FFF7EE86025 Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[[System.__Canon, System.Private.CoreLib]].MoveNextImpl()
00007FFFFFFFBF40 00007FFF7EE861AD Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[[System.__Canon, System.Private.CoreLib]].System-Collections-IEnumerator-MoveNext()
00007FFFFFFFBF50 00007FFF7EF2807C Microsoft.FSharp.Collections.SeqModule.ToList[[System.__Canon, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
00007FFFFFFFBFA0 00007FFF7E4E8C9F Microsoft.FSharp.Compiler.ExtensionTyping.GetTypeProvidersOfAssembly(System.String, ILScopeRef, System.String, ResolutionEnvironment, Boolean, Boolean, Microsoft.FSharp.Core.FSharpFunc`2<System.String,Boolean>, System.Version, range)
00007FFFFFFFC050 00007FFF7E1F83FF [email protected](System.Collections.Generic.IEnumerable`1<Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Compiler.Tainted`1<Microsoft.FSharp.Core.CompilerServices.ITypeProvider>>> ByRef)
Which the plot thickens.. GetTypeProviderImplementationTypes, which leads us to https://github.com/Microsoft/visualfsharp/blob/master/src/fsharp/ExtensionTyping.fs#L41 however I cannot actually see any source for an infinite recursion.