fsharp icon indicating copy to clipboard operation
fsharp copied to clipboard

Typeload Exception when function returns a delegate with voidptr parameter

Open 8 opened this issue 4 years ago • 2 comments

Hi,

I am getting a strange TypeLoadException in my code when I am trying to create a delegate that contains a voidptr, but only when I return it.

System.TypeLoadException: 'The generic type 'Microsoft.FSharp.Core.FSharpFunc`2' was used with an invalid instantiation in assembly 'FSharp.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'

I am not sure if it's bug report, as I am probably doing something wrong - I am just really confused why the code compiles but blows up at runtime.

Repro steps

  1. Declare or reference a delegate that takes a voidptr parameter
  2. Create a function that returns that delegate
  3. Try to use that function
type MyDelegate = delegate of voidptr -> unit

let method ptr = ()

[<Fact>]
let test_runtime_kaboom () =
  let getDelegate method = MyDelegate(method)
  ()

I have also attached an example project that reproduces that behavior below.

Expected behavior

I would expect that the call works without throwing an exception, because:

  1. the code compiles without any error or warning
  2. creating the delegate actually works, it's only when a function is declared that returns it, is when the problem occurs.
  3. changing the signature of the delegate from voidptr to any other type works as well

Actual behavior

A typeload exception is thrown.

System.TypeLoadException: 'The generic type 'Microsoft.FSharp.Core.FSharpFunc`2' was used with an invalid instantiation in assembly 'FSharp.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'

Known workarounds

None, except for creating and using the delegate instantly.

Related information

  • Operating system - Win 10 Version 20H2 OS Build 19042.804
  • .NET Runtime kind + .NET Core
  • Editing Tools - Visual Studio TestExplorer, nCrunch / JetBrains Rider / dotnet test

Take care, Martin

8 avatar Feb 19 '21 09:02 8

sample.zip Added example zip

8 avatar Feb 19 '21 09:02 8

I’m getting this as well with PortAudioFsharp, and I have not found a workaround.

Known workarounds

None, except for creating and using the delegate instantly.

What do you mean by this? Any chance you could include a Console project that shows what you mean?

daveyostcom avatar Apr 06 '24 23:04 daveyostcom