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)
维护者通常 3 天内回复
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 48/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- fsharp
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- F#
- 星标
- 4.3k
- 派生
- 882
- 平均合并
- 4 天 20 小时
- 30 天内合并 PR
- 134
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
dotnet/fsharp 的其他 Issue
-
Needs-Triage
难度 1/5 1 小时以内 新手友好度 95/100
维护者通常 3 天内回复
-
`FSharpValue.PreComputeTuplePropertyInfo` reports an out-of-range index for every struct tuple可能已有人在做 @T-Gro 于 3 天前认领。 未关闭Bug Needs-Triage
难度 2/5 1-3 小时 新手友好度 64/100
维护者通常 3 天内回复
-
Semantic classification cache for opened documents is never populated (written to the unopened-documents cache)可能已有人在做 @xperiandri 于 48 天前认领。 未关闭Needs-Triage
难度 1/5 1 小时以内 新手友好度 90/100
维护者通常 3 天内回复
-
Needs-Triage
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 3 天内回复
-
Bug Needs-Triage
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 3 天内回复
相似的 Issue
-
area/install-update P2 type/bug
难度 2/5 1-3 小时 新手友好度 75/100
NousResearch/hermes-agent#143313 · 4 条评论 ·
维护者通常 1 天内回复
-
area: tools good first issue
难度 2/5 1-3 小时 新手友好度 76/100
leduardo99/diorama#5 ·
-
难度 1/5 1 小时以内 新手友好度 91/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 85/100
IronCoreLabs/ironcore-alloy#351 ·
-
lazycodex
难度 2/5 1-3 小时 新手友好度 74/100
code-yeongyu/oh-my-openagent#10973 ·
维护者通常 1 天内回复