-
Tooltip "Full name" now shows demangled companion module names (e.g.
MyType.funcinstead ofMyTypeModule.func). (Issue #17335, PR #19867) -
Fix internal error (FS0193) when calling an indexed property setter with a named argument that matches an indexer parameter. (Issue #16034, PR #19851)
-
Fix missing FS1182 ("unused binding") warning for unused
letfunction bindings inside class types. (Issue #13849, PR #19805) -
Fix inner mutually-recursive
let rec ... and ...functions under--realsig+not being lifted to top-level static methods (TLR), causingFSharpFuncclosure allocations and loss oftail.opcodes — the large struct-mutual-recursion perf regression reported in Issue #17607. (PR #19882) -
Fix
TypeLoadException("Specialize tried to implicitly override a method with weaker type parameter constraints") and the related CLR crash with constrained inline calls by stripping constraints from closure-class typars inEraseClosures.convIlxClosureDef. (Issue #14492, Issue #19075, PR #19882) -
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) -
Fix double
Disposecall when ausebinding aliases its value via anaspattern or rebinds an existinguse-bound value. (Issue #12300, PR #19858) -
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) -
Fix
=adjacent to an interpolated string (e.g.C(Name=$"value")) being lexed as the invalid operator=$instead of an assignment followed by an interpolated string. (Issue #16696) -
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)
-
Warn FS3888 when a compiler-semantic attribute on a value/member or type/module is present in the
.fsbut missing from the.fsi. Such attributes were previously ignored at the consumer side. Under theErrorOnMissingSignatureAttributepreview language feature, FS3888 is an error. (Issue #19560, PR #19880) -
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) -
Fix dot-completion after indexed expressions (
a.[0].Data.,a[0].Data.,[1;2].Length.) returning unrelated global completions instead of expression-typings members. (Issue #4966, PR #19934) -
Quotations of
match s with "" -> _no longer leak thes <> null && s.Length = 0lowering; the empty-string optimization moved from pattern-match compilation to the optimizer so quoted expressions keepop_Equality(s, ""). (Issue #19873)
- Added warning FS3884 when a function or delegate value is used as an interpolated string argument. (PR #19289)
- Symbols: add ObsoleteDiagnosticInfo (PR #19359)
- FCS: add FSharpCheckFileResults.HasErrors (PR #19892)
- Add
#version;;directive to F# Interactive to display version and environment information. (Issue #13307, PR #19332) - Debug: rework for expressions stepping (PR #19894)
- Debug: rework conditional erasure, fix stepping over literals (PR #19897)
- Debug: fix if and match condition sequence points (PR #19932)
- 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)