Conversation
Breakpoints inside 'for x in xs -> body' (arrow syntax in list/array/seq comprehensions) failed to bind because the SeqMap active pattern in LowerComputedCollections.fs did not preserve debug point wrappers. Fix: wrap body extraction in DebugPoints and return 'debug body', matching the existing SeqCollectSingle pattern. Add 3 tests verifying debug points exist on body expressions for list arrow, array arrow, and do-yield comprehension forms.
range (e.g., 'return 1' not just 'return') by using mFull instead of keyword-only range m in DebugPointAtLeafExpr.Yes - Fix use binding in CE to use DebugPointAtTarget.No on the SynMatchClause to avoid generating an extra sequence point from the match target - Add VerifyMethodSequencePoints test infrastructure to verify sequence points for specific methods (e.g., Invoke, MoveNext, GenerateNext) - Add CEDebugPoints test module with 3 tests validating the fixes
- Fix compiler: use full binding range (mBind) instead of keyword-only range (leadingKeyword.Range) in mkSynCall for 'use' CE translation, eliminating the use-keyword-only sequence point in state machine output. - Extract verifyCEMethodDebugPoints helper to reduce test boilerplate. - Change use test from async/Invoke to task/MoveNext for single-method SP validation in the state machine. - Update expected SP values to match actual compiler output. - All 3 CEDebugPoints tests pass; PortablePdbs, ForArrowDebugPoints, and AsyncExpressionStepping regression tests pass.
…harp into bugfix/sequence-points
38c2f6e to
1ce8e10
Compare
…oc, and echo comments Addresses NO-LEFTOVERS verifier feedback: - Remove banner-style section separators in test helpers - Remove xmldoc that restates function names - Remove comments echoing code below them in test assertions - Condense verbose implementation xmldoc to issue URLs - Fix tryFixupSpan -> FixedSpan reference in ClassificationService.fs - Fix duplicate URL in FindReferences.fs #line directive test
The function is only called internally within NameResolution.fs, so it should not be exposed in the .fsi file. This minimizes the module's public API surface as flagged by CODE-QUALITY verifier.
Contributor
🔧 CLI Command Report
✅ Patch applied: |
The RegisterUnionCaseTesterForProperty calls in CallNameResolutionSink and CallMethodGroupNameResolutionSink used the full item range (including dot), duplicating the explicit calls at the property resolution sites that use propIdentRange (excluding dot). Remove the redundant generic calls. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
✅ No release notes required |
- Update ILVerify baselines for FSharp.Compiler.Service (4 files): offset shifts from EmitStartOfHiddenCode change in bootstrap build - Add PR #19278 URL to release note entries - Fix fantomas formatting in NameResolution.fsi - Merge main to pick up partitionWith and xUnit fixes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… cleanup Split out comment cleanup and API surface changes unrelated to the sequence point fixes, as requested by reviewer @auduchinok. Reverted files: - vsintegration/ (5 source + 1 test file): comment condensation - PrettyNaming.fs/fsi: doc comment removal - NameResolution.fs: comment improvement - NameResolution.fsi: RegisterUnionCaseTesterForProperty API removal - FindReferences.fs: comment cleanup - ProjectAnalysisTests.fs: comment cleanup - check.ps1: trimming size (merge artifact) - global.json: SDK version (merge artifact) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The IlxGen.fs fix adds unconditional EmitStartOfHiddenCode() at match expression ends. This inserts nop instructions in FSharp.Core match expressions, increasing the net9.0 trimmed size from 311296 to 311808. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…on tests Production changes (vs main): - IlxGen.fs: Remove .specialname from staticInitialization@ method (fixes JMC debugger skipping module-level breakpoints) - IlxGen.fs: Always emit EmitStartOfHiddenCode at match join points (fixes #12052) - CheckComputationExpressions.fs: Use mFull for yield/return debug point ranges (fixes #19248), fix use binding debug points (fixes #19255) Reverted from branch: - LowerComputedCollections.fs SeqMap DebugPoints change (proven no-op) - resumableCodeDefinitions removal (unrelated to debug points) - All unrelated lexer/parser/service changes Added instrumentation tests: - H3: Verify for-line and body-line SPs are in same method (3 tests) - H4: Verify no JMC-suppressing attrs on body method (2 tests) - H1: Verify --realsig- same-method placement (1 test) - #12052: Verify hidden FeeFee points ARE emitted at match joins - #19248: Multi-line return expression range test - #19255: Sequence point count verification for use in task CE - Implicit yield regression check Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
# Conflicts: # docs/release-notes/.FSharp.Compiler.Service/10.0.300.md # tests/AheadOfTime/Trimming/check.ps1
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…debug point in list comprehension - Update 211 .bsl files + 4 .fs test files: remove 'specialname' from staticInitialization@() methods to match the intentional codegen change from commit 5dce49e (baselines were overwritten by merge from main) - Fix duplicate sequence point in LowerComputedCollections.fs: only wrap with Expr.DebugPoint when lifting a let-binding's debug point, not for simple body expressions (e.g. 'for x in xs -> x * x') which already carry their own debug point Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
abonie
approved these changes
Mar 12, 2026
Resolve merge conflicts with main after PR #19372 (ILVerify fixes): - Release notes: keep both PR's and #19372's entries - ILVerify baselines: regenerated from clean builds - CodeGenRenamings01 BSL: regenerated from clean build - ForLoop, SeqExpressionStepping, AsyncExpressionStepping, ComputationExpressions, TestFunction24 BSLs: auto-merged successfully, verified by test runs All tested locally - Debugger, ForLoop, SeqExpressionStepping, AsyncExpressionStepping, ComputationExpressions, TestFunction24 tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update ILVerify baselines for RawByteMemory::set_Item IL offset change (0x1F -> 0x25) in both net10.0 and netstandard2.0 configurations. Update trimming check expected size for FSharp.Core.dll (310784 -> 311296). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
22 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Debug point / sequence point fixes
Fixes Extra sequence point at the end of match expressions #12052 — Extra sequence point at end of
matchexpressions caused debugger to briefly stop at unrelated branches during Step Over. Fixed by always emitting hidden code at decision tree join points inIlxGen.fs, not only when the stack is non-empty.Fixes Wrong sequence point range for
returninsideasynccomputation expression #19248 —return,yield,return!,yield!in CEs had debug points covering only the keyword range instead of the full expression. Fixed by using the full expression range forDebugPointAtLeafExprinCheckComputationExpressions.fs.Fixes Extra out-of-order sequence point for
useintaskcomputation expressions #19255 —usebindings intaskCEs emitted an extra out-of-order sequence point, making execution appear to jump backwards. Fixed by usingmBindinstead ofleadingKeyword.Rangefor theUsingcall.Fixes Debug points failing to bind in body of "[ for x in xs -> body ]" #13504 — Breakpoints in
[ for x in xs -> body ]comprehension bodies failed to bind. In the loweredListCollector.Add(body)call, the body's sequence point landed afterldloca collector(stack-non-empty), making it unbindable. Fixed by lifting the outermost let-binding debug point before the call setup so it lands at a stack-empty offset. Zero IL change — only PDB metadata moves.