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

    Projects

    Status

    New

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions