Skip to content

Typeload Exception when function returns a delegate with voidptr parameter #11132

@8

Description

@8

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-Compiler-CodeGenIlxGen, ilwrite and things at the backendBugImpact-Low(Internal MS Team use only) Describes an issue with limited impact on existing code.

    Type

    No fields configured for Bug.

    Projects

    Status

    New

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions