- Fix attributes on return type of unparenthesized tuple methods being silently dropped from IL. (Issue #462, PR #19714)
- 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)
- 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. (Issue #878, PR #19342)
- 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 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 overload resolution of static member extension on generic types when the call uses explicit type arguments and an intrinsic overload of the same name exists. (Issue #19664, PR #19736)
- Added warning FS3884 when a function or delegate value is used as an interpolated string argument. (PR #19289)
- Add
#version;;directive to F# Interactive to display version and environment information. (Issue #13307, PR #19332)
- 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)