Skip to content

Latest commit

 

History

History
92 lines (86 loc) · 18.1 KB

File metadata and controls

92 lines (86 loc) · 18.1 KB

Fixed

  • Suppress hover/symbol resolution for wildcard _ patterns inside member _.… bodies that incorrectly showed val _: T tooltip. (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 _ = &expr when let x = &expr compiles. (Issue #18841, PR #19811)
  • Honor --nowarn and --warnaserror for 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-positive AllowMultiple=false errors 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 | null pattern in a match expression. (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 rec scopes. (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, while loops) 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 override members without providing an implementation. (Issue #7776, PR #19503)
  • Fix CLIEvent properties to be correctly recognized as events: IsEvent returns true and XmlDocSig uses E: prefix instead of P:. (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 use in task computation 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/ReturnFromFinal being incorrectly called in non-tail positions (for, use, use!, try/with handler). (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.GetHashCode performance 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.AllowMultiple not being inherited for attributes subclassed in C#. (Issue #17107, PR #19315)
  • Fix signature generation: recursive module do binding 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: private keyword 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 Member instead of Method in 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: encodeCustomAttrElemType when 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 use bindings when a C#-style Dispose extension method is in scope alongside IDisposable.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 global header 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_Item witness for string indexers (unknown builtin witness 'get_ItemDynamic'). (Issue #18093, PR #19757)
  • Allow | null nullable annotation on a [<MeasureAnnotatedAbbreviation>] over a reference type (e.g. the FSharp.UMX type string<[<Measure>] 'm> = string pattern). (Issue #19657)
  • Fix [<Struct>] ?param optional parameters could not be passed using the explicit ?param = expr caller-side syntax with a ValueOption value. (Issue #19711, PR #19742)
  • Fix signature conformance: overloaded member with unit parameter M(()) now matches sig member M: unit -> unit. (Issue #19596, PR #19615)
  • Fix --quiet not 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 randomized String.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:3390 when a get/set property documents the full parameter set across both accessors. (Issue #13684, PR #19884)
  • FSI multi-assembly emit (--multiemit+) now attaches System.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

  • 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)

Changed

  • 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 (GetObjectData and field-restoring constructor) is now gated behind langversion:11 (LanguageFeature.ExceptionFieldSerializationSupport). With langversion ≤10, exception codegen is unchanged from pre-#19342 behavior. (PR #19746)

Breaking Changes