From 581eb587853386dfae144cf323e65ea8cd8334ec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 09:47:04 +0000 Subject: [PATCH 1/2] Initial plan From b2af65df49950ccffc50e878bd41d4f542cb1ed8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:03:04 +0000 Subject: [PATCH 2/2] Fix ICE in BuildDisposableCleanup when Dispose extension methods are in scope Use AtMostOneResult to leverage existing intrinsic-over-extension priority in AllMethInfosOfTypeInScope, matching how regular method calls resolve Dispose. Agent-Logs-Url: https://github.com/dotnet/fsharp/sessions/ebba43f1-81b6-417c-9138-f5867056fd94 Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com> --- .../Checking/Expressions/CheckExpressions.fs | 2 +- .../UseBindings/UseBindings.fs | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) 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