Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

 

History

History
105 lines (98 loc) · 21 KB

File metadata and controls

105 lines (98 loc) · 21 KB

Fixed

  • Tooltip "Full name" now shows demangled companion module names (e.g. MyType.func instead of MyTypeModule.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 let function 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), causing FSharpFunc closure allocations and loss of tail. 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 in EraseClosures.convIlxClosureDef. (Issue #14492, Issue #19075, PR #19882)

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

  • Fix double Dispose call when a use binding aliases its value via an as pattern or rebinds an existing use-bound value. (Issue #12300, PR #19858)

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

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

  • Warn FS3888 when a compiler-semantic attribute on a value/member or type/module is present in the .fs but missing from the .fsi. Such attributes were previously ignored at the consumer side. Under the ErrorOnMissingSignatureAttribute preview 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:3390 when 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 the s <> null && s.Length = 0 lowering; the empty-string optimization moved from pattern-match compilation to the optimizer so quoted expressions keep op_Equality(s, ""). (Issue #19873)

Added

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

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