Skip to content

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

@rolfbjarne

Description

@rolfbjarne

Code:

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

Binlog:

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions