Debug: FS2014 duplicate `<f>__debug@N` in method table for an inline call inside a resumable CE whose `Run` has caller-info parameters (regression in 11.0.100-rc.2)
I maintainer di solito rispondono entro 3 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- fsharp
- Ambito
- build-system, compilers
Direzione di ricerca
Start by building the supplied Lib.fs repro in Debug with SDK 11.0.100-rc.2, then compare the generated state-machine and closure output for the resumable and dynamic paths. The issue links #20469 and reports that both branches emit a specialized inline call under the same debug method name; inspect that lowering path and confirm the duplicate method entry is gone while the listed variations still behave as described.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Repro
Lib.fs, in a net10.0 library, built with dotnet build -c Debug on SDK 11.0.100-rc.2.26504.105:
module Lib
#nowarn "3513"
open System.Runtime.CompilerServices
open System.Runtime.InteropServices
open Microsoft.FSharp.Core.CompilerServices
open Microsoft.FSharp.Core.CompilerServices.StateMachineHelpers
[<Struct; NoEquality; NoComparison>]
type D<'T> = { mutable Result: 'T }
type B() =
member inline _.Delay([<InlineIfLambda>] f: unit -> ResumableCode<'D, 'T>) =
ResumableCode<'D, 'T>(fun sm -> (f ()).Invoke(&sm))
member inline _.Return(v: 'T) = ResumableCode<D<'T>, 'T>(fun sm -> sm.Data.Result <- v; true)
member inline _.Run(code: ResumableCode<D<'T>, 'T>,
[<CallerLineNumber; Optional; DefaultParameterValue(0)>] line: int) : 'T =
if __useResumableCode then
__stateMachine<D<'T>, 'T>
(MoveNextMethodImpl<D<'T>>(fun sm -> __resumeAt sm.ResumptionPoint; code.Invoke(&sm) |> ignore))
(SetStateMachineMethodImpl<D<'T>>(fun _ _ -> ()))
(AfterCode<D<'T>, 'T>(fun sm -> sm.Data.Result))
else
let mutable sm = ResumableStateMachine<D<'T>>()
code.Invoke(&sm) |> ignore
sm.Data.Result
let b = B()
let f () : int = b { return [ 3 ] |> List.sum }
Result
error FS2014: A problem occurred writing the binary 'obj/Debug/net10.0/refint/repro.dll': Error in pass2 for type Lib, error: duplicate entry '<sum>__debug@28' in method table
Narrowing
| Variation | rc.2 Debug |
|---|---|
| As above | FS2014 |
-p:ProduceReferenceAssembly=false |
FS2014 (on the main dll instead of refint) |
Run without the [<CallerLineNumber>] parameter |
builds |
Body without an inline call (b { return 3 }) |
builds |
task { return [ 3 ] |> List.sum } |
builds |
Non-resumable builder with the same caller-info Run |
builds |
| Release | builds |
Same repro on SDK 11.0.100-rc.1.26425.128 (Debug) |
builds |
In a builder of the same shape (no inline call in the body), rc.2 Debug now emits the state-machine struct and the dynamic-path closures for one CE, where rc.1 Debug emitted only the closure. So both branches of if __useResumableCode seem to survive, and an inline call in the body is specialized once per branch, under the same <f>__debug@<line> name. This looks related to #20469 ("Preserve resumable state-machine lowering in Debug"), merged between rc.1 and rc.2.
Found in https://github.com/ekonbenefits/FSharp.Interop.Dlr (its dlr { } builder has this Run shape), where any dlr { } that calls an inline function fails to build in Debug on rc.2: ekonbenefits/FSharp.Interop.Dlr#235.
- Lingua principale
- F#
- Stelle
- 4.3k
- Fork
- 882
- Merge medio
- 4g 20h
- PR unite (30g)
- 134
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di dotnet/fsharp
-
Needs-Triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
I maintainer di solito rispondono entro 3 giorni
-
`FSharpValue.PreComputeTuplePropertyInfo` reports an out-of-range index for every struct tupleForse già presa @T-Gro l’ha presa 3 giorni fa. ApertaBug Needs-Triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
I maintainer di solito rispondono entro 3 giorni
-
Semantic classification cache for opened documents is never populated (written to the unopened-documents cache)Forse già presa @xperiandri l’ha presa 48 giorni fa. ApertaNeeds-Triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
I maintainer di solito rispondono entro 3 giorni
-
Needs-Triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
dotnet/fsharp#20265 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
Bug Needs-Triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di dotnet/fsharp
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
maniator/verticopolis#1303 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
`@vanilla-extract/turbopack-plugin`: "getImageSize is not a function" with Next.js 16.4.x when a `.css.ts` file imports an imageForse già presa @aevarOrigo l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vanilla-extract-css/vanilla-extract#1799 · 1 commento ·
-
Cannot find symbol CTypedefForse già presa @pellico l’ha presa oggi. Apertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
-
Make PDAQP an optional extraAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
in progress priority: low shared
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
storytold/photocraft#8616 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni