Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Compiler/Checking/Expressions/CheckExpressions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3149,7 +3149,7 @@ let BuildDisposableCleanup (cenv: cenv) env m (v: Val) =
v.SetHasBeenReferenced()

let disposeMethod =
match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Dispose" g.system_IDisposable_ty with
match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m ad "Dispose" g.system_IDisposable_ty with
| [x] -> x
| _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,29 @@ module UseBindings =
|> asFsx
|> compile
|> shouldSucceed

[<Fact>]
let ``use binding does not ICE when Dispose extension method is in scope`` () =
FSharp """
open System
open System.Runtime.CompilerServices
type Disposable() =
interface IDisposable with
member _.Dispose() = ()
[<Extension>]
type PublicExtensions =
[<Extension>]
static member inline Dispose(this: #IDisposable) =
this
let foo() =
use a = new Disposable()
()
foo()
"""
|> asExe
|> compile
|> shouldSucceed
Loading