diff --git a/src/Compiler/Checking/Expressions/CheckExpressions.fs b/src/Compiler/Checking/Expressions/CheckExpressions.fs index 635a0dff045..fcc561c0fff 100644 --- a/src/Compiler/Checking/Expressions/CheckExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckExpressions.fs @@ -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)) diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/UseBindings/UseBindings.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/UseBindings/UseBindings.fs index 6b042ea93bf..7ccea723a8f 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/UseBindings/UseBindings.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/UseBindings/UseBindings.fs @@ -45,3 +45,29 @@ module UseBindings = |> asFsx |> compile |> shouldSucceed + + [] + 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() = () + +[] +type PublicExtensions = + [] + static member inline Dispose(this: #IDisposable) = + this + +let foo() = + use a = new Disposable() + () + +foo() + """ + |> asExe + |> compile + |> shouldSucceed