
Description
Issue description
I get a nullness warning with the following:
let dispose (x: IDisposable | null) : unit =
match x with
| null -> ()
| d -> d.Dispose()
let useThing (thing: #IDisposable) =
try
printfn "%O" thing
finally
dispose thing // warning generated
Since the dispose function allows null, I do not think a warning should be generated. No warning is generated for a non-flexible type, e.g.:
let useThing (thing: IDisposable) =
try
printfn "%O" thing
finally
dispose thing // no warning generated
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
net9.0
Reproducible code snippet and actual behavior
No response
Possible workarounds
No response
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done