<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/76208>76208</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] suppress `[clang-analyzer-optin.core.EnumCastOutOfRange]` for bit-wise operator of scoped enum
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          zufuliu
      </td>
    </tr>
</table>

<pre>
    related to issue  #48725.

```c++
enum class Flag {
    None = 0,
 A = 1, 
    B = 2,
};

constexpr Flag operator|(Flag a, Flag b) noexcept {
    return static_cast<Flag>(static_cast<int>(a) | static_cast<int>(b));
}

Flag getFlag() {
    return Flag::A | Flag::B;
}
```

https://godbolt.org/z/bhqcoPEPj
```
<source>:8:12: warning: The value '3' provided to the cast expression is not in the valid range of values for 'Flag' [clang-analyzer-optin.core.EnumCastOutOfRange]
 8 |     return static_cast<Flag>(static_cast<int>(a) | static_cast<int>(b));
      |            ^
<source>:1:12: note: enum declared here
    1 | enum class Flag {
      | ~~~~~~~~~~~^~~~~~
 2 |     None = 0,
      |     ~~~~~~~~~
    3 |     A = 1, 
      | ~~~~~~
    4 |     B = 2,
      |     ~~~~~~
    5 | };
 | ~
<source>:12:12: note: Calling 'operator|'
   12 |     return Flag::A | Flag::B;
      |            ^~~~~~~~~~~~~~~~~
<source>:8:12: note: The value '3' provided to the cast expression is not in the valid range of values for 'Flag'
    8 |     return static_cast<Flag>(static_cast<int>(a) | static_cast<int>(b));
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVU2TozYQ_TXti8ouaA0GDhz8ecxupXJPCWhjbckSkcTszhz2t6ckPODxepPsZaKihnE3eu-pW90tnJOdJqog20K2X4jBn42tXofToOSwqE37UllSwlPLvGHSuYEYA-RPRY7ZCpI9JJvr33UyPg3gNjzRSnq4sEYJ59hRiY5BfnUwxthvRhMDvmcJ4O5q3kRDCrhj84fbaMTpK8j3wLe37I3RztO33o40picrvLGQ7wCLaBIBMv5XA5ZMG_rWUO_fK7LkB6uZ88LL5s9GOA98FzYBPwAW7-1S-9EsAiDkO_YTfyAMzyQ5399qj6I68pEHixHsR1GjjA3wzSaSzb-3D5DfsnFLdPa-d2ELHgGPnWlro_zK2A7w-Ap4rM9_Nebz4fOXxxh858xgGwqH4psC-CZF4Bv2VVgtddDC_jgTexZqIAaYc8Cc9dY8y3a8Pv5MLMSGhUSRc9JoJh3TxjOpo_dZKNkyK3RHzJxGKMdOxga8MT45g2zbKKG7pdBCvbySXZreS71qjKXVQQ-XnXD-0-A_nX4PQJBdY8KKGLePy3OkmjivC7LDw3imUzy18RTesXZaapSw1LIzWZph0wj7j9U1Mn-fF2SH8T1-gpOyR3X4TvoMMTn55HxYsbfks_Vp2nRf0Y_4Zk8WPbdVP8I_DiT-EMmdUErqLlyid50hnyhSvL8b_6Xcfpbg73frXwroTeZHVM8s_P-rhgcR-oU1oqVvbYd1pENKqV3dta1FW_G25KVYUJXmCUfMi7JcnCtxyvKszNeU5oSYirqsi4KyNF3X_LSmbCErTJCniJiss5SXK0zLUyvKNZ3aU1vyDJ4SugipVko9X0IHXcTRWOVrTIqFEjUpF2cq4tiqvGxfADHMWFuFTct66Bw8JUo672YYL72K0_hmW7Znbuhjzlk42a-3v3USb0Et_fKrdDSNx3BLXGN6amMrWQxWVXdDQvrzUK8acwE8BpXX17K35gs1HvAYT-4Aj_HwfwcAAP__cpduOQ">