- Suppress hover/symbol resolution for wildcard
_patterns insidemember _.…bodies that incorrectly showedval _: Ttooltip. (PR #19760) - Deduplicate format specifier locations in computation expressions so editor tooling no longer reports duplicate entries for the same
%specifier. (Issue #16419, PR #19791) - Reject non-function bindings for single-case and partial active pattern names with FS1209, matching the existing multi-case behavior. (PR #19763)
- Fix FS0421 "The address of the variable cannot be used at this point" incorrectly raised for the discard pattern
let _ = &exprwhenlet x = &exprcompiles. (Issue #18841, PR #19811) - Honor
--nowarnand--warnaserrorfor warnings emitted during command-line option parsing (Issue #19576, PR #19776) - Fix
[<return: X>]prefix attributes being silently dropped on class members, and fix false-positiveAllowMultiple=falseerrors when[<X>]and[<return: X>]are applied to the same binding. (Issue #17904, Issue #19020, PR #19738) - Preserve type abbreviations (
string, user-defined aliases) in the refined type of bindings introduced after a| nullpattern in amatchexpression. (Issue #19646, PR #19745) - Fix attributes on return type of unparenthesized tuple methods being silently dropped from IL. (Issue #462, PR #19714)
- Fix false-positive nullness warning (FS3261) when pattern matching narrows nullness inside seq/list/array comprehensions. (Issue #19644, PR #19743)
- Fix internal error FS0073 "Undefined or unsolved type variable" in IlxGen when nested inline SRTP functions with multiple overloads leave unsolved typars in the non-witness codegen path. (Issue #19709, PR #19710)
- Fix NRE when calling virtual Object methods on value types through inline SRTP functions. (Issue #8098, PR #19511)
- Narrow overload-resolution error ranges to the method name only instead of covering the entire expression. (Issue #14284, PR #19505)
- Fix attributes not resolved from opened namespaces in
namespace rec/module recscopes. (Issue #7931, PR #19502) - Fix DU case names matching IWSAM member names no longer cause duplicate property entries. (Issue #14321, PR #19341)
- Fix DefaultAugmentation(false) duplicate entry in method table. (Issue #16565, PR #19341)
- Fix abstract event accessors now have SpecialName flag. (Issue #5834, PR #19341)
- Fix warning 20 ("expression is implicitly ignored") pointing at the wrong range when the last expression in a sequential block (e.g. inside
for,whileloops) is non-unit. The squiggle now correctly highlights only the offending expression. (Issue #5735, PR #19504) - Fix missing "No implementation was given" error when F# class inherits from a C# class with
abstract overridemembers without providing an implementation. (Issue #7776, PR #19503) - Fix CLIEvent properties to be correctly recognized as events:
IsEventreturnstrueandXmlDocSigusesE:prefix instead ofP:. (Issue #10273, PR #18584) - Fix extra sequence point at the end of match expressions. (Issue #12052, PR #19278)
- Fix wrong sequence point range for
return/yield/return!/yield!inside computation expressions. (Issue #19248, PR #19278) - Fix extra out-of-order sequence point for
useintaskcomputation expressions. (Issue #19255, PR #19278) - Fix debug points failing to bind in body of
[ for x in xs -> body ]comprehensions. (Issue #13504, PR #19278) - Fix outref parameter compiled as byref. (Issue #13468, PR #19340)
- Fix static abstract interface members with byref params. (Issue #18135, PR #19340)
- Fix codegen to produce IL passing ILVerify: specialized stelem/ldelem for primitives, callvirt→call on value types, castclass at interface join points, filter→catch inside finally handlers, witness field alignment in state machine structs. (PR #19372)
- Fix object expressions in struct types no longer generate invalid IL with byref fields. (Issue #19068, PR #19339)
- Avoid duplicate parameter names in closure constructors. (Issue #17692, PR #19339)
- Improve let-rec codegen: reorder bindings to allocate lambda closures before non-lambda values that reference them. (PR #19339)
- Fix
YieldFromFinal/ReturnFromFinalbeing incorrectly called in non-tail positions (for,use,use!,try/withhandler). (Issue #19402, PR #19403) - Fixed how the source ranges of warn directives are reported (as trivia) in the parser output (by not reporting leading spaces). (Issue #19405, PR #19408)
- Fix UoM value type
ToString()returning garbage values when--checknulls+is enabled, caused by double address-taking in codegen. (Issue #19435, PR #19440) - Fix accessibility and type-matching for extension method lookups. (Issue #19349, PR #19536)
- Fix completion inconsistently showing some obsolete members (fields and events) while hiding others (methods and properties). All obsolete members are now consistently hidden by default. (Issue #13512, PR #19506)
- Fix O(n)
TypeStructure.GetHashCodeperformance regression causing sustained high CPU in IDE mode with generative type providers. (Issue #18925, PR #19369) - Fix TypeLoadException when creating delegate with voidptr parameter. (Issue #11132, PR #19338)
- Suppress tail calls when localloc (NativePtr.stackalloc) is used. (Issue #13447, PR #19338)
- Fix TypeLoadException in Release builds with inline constraints. (Issue #14492, PR #19338)
- Fix nativeptr in interfaces leads to TypeLoadException. (Issue #14508, PR #19338)
- Fix box instruction for literal upcasts. (Issue #18319, PR #19338)
- Fix Decimal Literal causes InvalidProgramException in Debug builds. (Issue #18956, PR #19338)
- Fix
AttributeUsage.AllowMultiplenot being inherited for attributes subclassed in C#. (Issue #17107, PR #19315) - Fix signature generation: recursive module
dobinding leaking compiler-generated val. (Issue #13832, PR #19586) - Fix signature generation: literal values in attribute arguments now preserve literal identifier name. (Issue #13810, PR #19586)
- Fix signature generation: struct types with non-comparable/non-equatable fields now include
[<NoComparison>]/[<NoEquality>]. (Issue #15339, PR #19586) - Fix signature generation: backtick escaping for identifiers containing backticks. (Issue #15389, PR #19586)
- Fix signature generation:
privatekeyword placement for prefix-style type abbreviations. (Issue #15560, PR #19586) - Fix signature generation: missing
[<Class>]attribute for types without visible constructors. (Issue #16531, PR #19586) - Fix F# exception serialization now preserves fields (gated behind
--langversion:11). (Issue #878, PR #19342, PR #19746) - Fix methods being tagged as
Memberinstead ofMethodin tooltips. (Issue #10540, PR #19507) - Fix Debug-mode compilation when mixing resumable and standard computation expressions. (Issue #19625, PR #19630)
- IlxGen: fix missing CompilationMapping attribute for generic values (PR #19643)
- Fix internal error
FS0192: encodeCustomAttrElemTypewhen using arrays of user-defined types as custom attribute arguments. Empty arrays (e.g.[<DefaultValue([||] : A[])>]) now compile successfully; non-empty arrays of unencodable types report a proper diagnostic (FS3887) instead of an internal error. (Issue #12796, PR #19472) - Fix internal compiler error in
usebindings when a C#-styleDisposeextension method is in scope alongsideIDisposable.Dispose. (Issue #19552, PR #19568) - Fix signature generation: single-case struct DU gets spurious bar causing FS0300. (Issue #19597, PR #19609)
- Fix signature generation: backticked active pattern case names lose escaping. (Issue #19592, PR #19609)
- Fix signature generation:
namespace globalheader dropped from generated signature. (Issue #19593, PR #19609) - Fix signature generation: SRTP constraints use postfix syntax that fails conformance, now uses explicit type param declarations. (Issue #19594, PR #19609)
- Fix signature generation: type params with special characters missing backtick escaping. (Issue #19595, PR #19609)
- Fix internal error when using custom attribute with
[<Optional>]value type parameter and no[<DefaultParameterValue>]. (Issue #8353, PR #19484) - Fix overload resolution of static member extension if one or more intrinsics candidates exist (Issue #19664, PR #19698)
- Fix parallel compilation of scripts (PR #19649)
- Fix parser recovery, name resolution, and code completion for unfinished enum patterns (PR #19708)
- Parser: fix unexpected diagnostics in debug builds, improve error messages (PR #19730)
- Fix parser error for anonymous record type aliases with postfix type operators (e.g.
{| Id: Guid |} []) when closing bracket is column-aligned with opening bracket. (Issue #17407, PR #19762) - Fix internal error when resolving SRTP
get_Itemwitness forstringindexers (unknown builtin witness 'get_ItemDynamic'). (Issue #18093, PR #19757) - Allow
| nullnullable annotation on a[<MeasureAnnotatedAbbreviation>]over a reference type (e.g. the FSharp.UMXtype string<[<Measure>] 'm> = stringpattern). (Issue #19657) - Fix
[<Struct>] ?paramoptional parameters could not be passed using the explicit?param = exprcaller-side syntax with aValueOptionvalue. (Issue #19711, PR #19742) - Fix signature conformance: overloaded member with unit parameter
M(())now matches sigmember M: unit -> unit. (Issue #19596, PR #19615) - Fix
--quietnot suppressing NuGet restore output on stdout in F# Interactive (Issue #18086) - Reference assembly MVIDs are now deterministic across compiler invocations. Previously,
--refout/<ProduceReferenceAssembly>true</ProduceReferenceAssembly>produced a different MVID every build because the implied signature hash used .NET's randomizedString.GetHashCode(). (Issue #19751, PR #19801) - Parser: recover on unfinished if and binary expressions (PR #19724)
- Emit debug points at a stack-empty position (PR #19877)
- Fix spurious XmlDoc warnings (unknown parameter / no documentation for parameter) under
--warnon:3390when a get/set property documents the full parameter set across both accessors. (Issue #13684, PR #19884) - FSI multi-assembly emit (
--multiemit+) now attachesSystem.Diagnostics.DebuggableAttribute(DisableOptimizations|Default)to each submission's manifest when--debug+is set, matching the single-emit and regular-compiler behavior so debuggers see submissions as unoptimized. (Issue #14572, PR #19921)
- Added warning FS3884 when a function or delegate value is used as an interpolated string argument. (PR #19289)
- Symbols: add ObsoleteDiagnosticInfo (PR #19359)
- Add
#version;;directive to F# Interactive to display version and environment information. (Issue #13307, PR #19332) - Debug: rework for expressions stepping (PR #19894)
- Improvements in error and warning messages: new error FS3885 when
let!/use!is the final expression in a computation expression; new warning FS3886 when a list literal contains a single tuple element (likely missing;separator); improved wording for FS0003, FS0025, FS0039, FS0072, FS0247, FS0597, FS0670, FS3082, and SRTP operator-not-in-scope hints. (PR #19398) - Exception field serialization (
GetObjectDataand field-restoring constructor) is now gated behindlangversion:11(LanguageFeature.ExceptionFieldSerializationSupport). With langversion ≤10, exception codegen is unchanged from pre-#19342 behavior. (PR #19746)