dotnet / dotnet/sdk

Missing CA1416 when type has SupportedOSPlatform and member has both SupportedOSPlatform and UnsupportedOSPlatform

Open
#51,144 0 comments 0 reactions 0 assignees View on GitHub
Area-Microsoft.CodeAnalysis.NetAnalyzers untriaged
Dominant language
C#
Stars
3.2k
Forks
1.3k
PR merge metrics
PR metrics pending

Description

Code:

```cs
using System.Runtime.Versioning;

public class C {
[SupportedOSPlatform ("macos12.0")]
public void M ()
{
Console.WriteLine (E1.A); // no warning
Console.WriteLine (E1.B); // no warning
Console.WriteLine (E1.C); // warning

Console.WriteLine (E2.A); // warning
Console.WriteLine (E2.B); // warning
Console.WriteLine (E2.C); // warning
}
}

[SupportedOSPlatform ("macos")]
public enum E1 : ulong {
[SupportedOSPlatform ("macos")]
[UnsupportedOSPlatform ("macos11.0", "Use 'Z' instead.")]
A,

[SupportedOSPlatform ("macos10.0")]
[UnsupportedOSPlatform ("macos11.0", "Use 'Z' instead.")]
B,

[UnsupportedOSPlatform ("macos11.0", "Use 'Z' instead.")]
C,

Z,
}

// No SupportedOSPlatform on the enum
public enum E2 : ulong {
[SupportedOSPlatform ("macos")]
[UnsupportedOSPlatform ("macos11.0", "Use 'Z' instead.")]
A,

[SupportedOSPlatform ("macos10.0")]
[UnsupportedOSPlatform ("macos11.0", "Use 'Z' instead.")]
B,

[UnsupportedOSPlatform ("macos11.0", "Use 'Z' instead.")]
C,

Z,
}
```

Build output:

```
Class1.cs(11,28): warning CA1416: This call site is reachable on: 'macOS/OSX' 12.0 and later. 'E2.A' is unsupported on: 'macOS/OSX' 11.0 and later (Use 'Z' instead.).
Class1.cs(13,28): warning CA1416: This call site is reachable on: 'macOS/OSX' 12.0 and later. 'E2.C' is unsupported on: 'macOS/OSX' 11.0 and later (Use 'Z' instead.).
Class1.cs(9,28): warning CA1416: This call site is reachable on: 'macOS/OSX' 12.0 and later. 'E1.C' is unsupported on: 'macOS/OSX' 11.0 and later (Use 'Z' instead.).
Class1.cs(12,28): warning CA1416: This call site is reachable on: 'macOS/OSX' 12.0 and later. 'E2.B' is unsupported on: 'macOS/OSX' 11.0 and later (Use 'Z' instead.).
```

I would expect E1.A and E1.B to raise warnings just like E2.A and E2.B does.

Complete test project: [macoslibrary-8f14b1a.zip](https://github.com/user-attachments/files/22743631/macoslibrary-8f14b1a.zip)

Binlog:

[msbuild.binlog.zip](https://github.com/user-attachments/files/22743634/msbuild.binlog.zip)

Version:

```
$ dotnet --info
.NET SDK:
Version: 10.0.100-rc.1.25451.107
Commit: 2db1f5ee2b
Workload version: 10.0.100-rc.1.25458.2
MSBuild version: 17.15.0-preview-25451-107+2db1f5ee2

Runtime Environment:
OS Name: Mac OS X
OS Version: 15.7
OS Platform: Darwin
RID: osx-arm64
Base Path: /usr/local/share/dotnet/sdk/10.0.100-rc.1.25451.107/

.NET workloads installed:
[macos]
Installation Source: SDK 10.0.100-rc.1
Manifest Version: 15.5.10727-net10-rc.1/10.0.100-rc.1
Manifest Path: /usr/local/share/dotnet/sdk-manifests/10.0.100-rc.1/microsoft.net.sdk.macos/15.5.10727-net10-rc.1/WorkloadManifest.json
Install Type: FileBased

[maui-ios]
Installation Source: SDK 10.0.100-rc.1
Manifest Version: 10.0.0-rc.1.25452.6/10.0.100-rc.1
Manifest Path: /usr/local/share/dotnet/sdk-manifests/10.0.100-rc.1/microsoft.net.sdk.maui/10.0.0-rc.1.25452.6/WorkloadManifest.json
Install Type: FileBased

[ios]
Installation Source: SDK 10.0.100-rc.1
Manifest Version: 18.5.10727-net10-rc.1/10.0.100-rc.1
Manifest Path: /usr/local/share/dotnet/sdk-manifests/10.0.100-rc.1/microsoft.net.sdk.ios/18.5.10727-net10-rc.1/WorkloadManifest.json
Install Type: FileBased

[maccatalyst]
Installation Source: SDK 10.0.100-rc.1
Manifest Version: 18.5.10727-net10-rc.1/10.0.100-rc.1
Manifest Path: /usr/local/share/dotnet/sdk-manifests/10.0.100-rc.1/microsoft.net.sdk.maccatalyst/18.5.10727-net10-rc.1/WorkloadManifest.json
Install Type: FileBased

Configured to use workload sets when installing new manifests.

Host:
Version: 10.0.0-rc.1.25451.107
Architecture: arm64
Commit: 2db1f5ee2b

.NET SDKs installed:
6.0.425 [/usr/local/share/dotnet/sdk]
7.0.410 [/usr/local/share/dotnet/sdk]
8.0.304 [/usr/local/share/dotnet/sdk]
8.0.402 [/usr/local/share/dotnet/sdk]
9.0.100 [/usr/local/share/dotnet/sdk]
9.0.102 [/usr/local/share/dotnet/sdk]
9.0.103 [/usr/local/share/dotnet/sdk]
9.0.106 [/usr/local/share/dotnet/sdk]
9.0.109 [/usr/local/share/dotnet/sdk]
9.0.110 [/usr/local/share/dotnet/sdk]
9.0.203 [/usr/local/share/dotnet/sdk]
9.0.205 [/usr/local/share/dotnet/sdk]
9.0.300 [/usr/local/share/dotnet/sdk]
9.0.305 [/usr/local/share/dotnet/sdk]
10.0.100-preview.6.25358.103 [/usr/local/share/dotnet/sdk]
10.0.100-rc.1.25451.107 [/usr/local/share/dotnet/sdk]

.NET runtimes installed:
Microsoft.AspNetCore.App 6.0.33 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.20 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.0-rc.2.24474.3 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.4 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.7 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.9 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 10.0.0-preview.6.25358.103 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 10.0.0-rc.1.25451.107 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.33 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.36 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.20 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.8 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.4 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.6 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.7 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.8 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.9 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 10.0.0-preview.6.25358.103 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 10.0.0-rc.1.25451.107 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
x64 [/usr/local/share/dotnet/x64]
registered at [/etc/dotnet/install_location_x64]

Environment variables:
DOTNET_CLI_TELEMETRY_OPTOUT [1]

global.json file:
Not found

Learn more:
https://aka.ms/dotnet/info

Download .NET:
https://aka.ms/dotnet/download
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.