Skip to content

Nullness issue - type check in multi-match expressions doesn't eliminate null #19042

@Lanayx

Description

@Lanayx

Issue description

I expect that type check in multi-match expressions eliminates nulls after check just like in simple match cases.

Choose one or more from the following categories of impact

  • Unexpected nullness warning (false positive in nullness checking, code uses --checknulls and langversion:preview).
  • Missing nullness warning in a case which can produce nulls (false negative, code uses --checknulls and langversion:preview).
  • Breaking change related to older null constructs in code not using the checknulls switch.
  • Breaking change related to generic code and explicit type constraints (null, not null).
  • Type inference issue (i.e. code worked without type annotations before, and applying the --checknulls enforces type annotations).
  • C#/F# interop issue related to nullness metadata.
  • Other (none of the categories above apply).

Operating System

Windows (Default)

What .NET runtime/SDK kind are you seeing the issue on

.NET SDK (.NET Core, .NET 5+)

.NET Runtime/SDK version

.NET SDK 10.0.100-rc.2.25502.107

Reproducible code snippet and actual behavior

let test (s: string) =
    ()

[<EntryPoint>]
let main argv =
    let x = true
    let y: string | null = ""
    match x, y with
    | true, _ -> ()
    | false, null -> ()
    | false, s -> test s

    0

s type is mistakenly resolved as string | null

Possible workarounds

let test (s: string) =
    ()

[<EntryPoint>]
let main argv =
    let x = true
    let y: string | null = ""
    match x with
    | true -> ()
    | false, Null -> ()
    | false, NonNull s -> test s
    0

Metadata

Metadata

Assignees

Labels

Area-NullnessIssues related to handling of Nullable Reference TypesBug

Type

No type

Projects

Status

New

Relationships

None yet

Development

No branches or pull requests

Issue actions