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

    <tr>
        <th>Summary</th>
        <td>
            enum and enum class give different values with bit field
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    With the commented out enum clang/gcc give the same results which is the one I want
With the code below (using enum class) gcc gives me the expected results but clang gives me -2 

```
#include <cstdio>

//enum E { A, B, C, D }; // <-- this gets C
enum class E { A, B, C, D }; // <-- this gets -2
struct S { E v : 2; long long i : 30; };

int main() {
        S s{E::C, -1};
        switch (s.v) {
                case E::C: printf("Got C\n"); return 0;
                default: printf("Got %d\n", s.v); return 0;
        }
}

```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyck82OqzgQhZ-m2JQSGRuSsGBB_kYj9a4XszZ2BTwyJsI2mXn7K0M6nSv16kqmQHadr46xS3pvOkdUQ3mE8pzJGPpxqj9oHs_0QdYan7Wj_r_-x4QeQ0-oxmEgF0jjGAOSiwMqK10H_NophZ2ZacnzciCcyEcbPD56o3o0flkZHeHf-JAuAGveuJqwJTs-EPgheuO6F9174BV-4T0Oawn6704qOfkq08awmvnO23AE1qSxY8_BGuDCOGWjJgRxUj5oM4K4PBP5Ffh1KX1B2B-xAX7CYwqnFM4I-zOII66JibDZYOiNx46CxxOw5tv4nzE2HFjjwxRVwM8FcMEZQTTIk8qOrluDWSYFW1gLct2EcQEHaRzwQ_p1sF_nq0_0sD9eQDQgmsXKJn_TVf5hgurTCfjt_JsSWKWkJ3xpRYP3ybhwW2rwv8aAJyhPDjgHXiVDE4U4OWQvOrBK001GG35SAy_1C3DC1cDPnP05fazx7WgzXQtdiUpmVOf7YifK3a7Ms77mO2KCF-IgSbV0q3RelG1btiUXRdvmRWZqznjJSlbkeXq2PM-FLm5Kaaryg8yhYDRIY7fWzsN2nLrMeB-pzsWhKKrMypasX7qIc0cPXFbTTspzNtVJtGlj56Fg1vjgvzHBBEv1cmGk029Xfm0lbW43msgFnKWN5PGRGqY1AW-GrM7iZOs-hLtPx7Jcps6EPrZbNQ7Ar6nM87W5T-O_pALw62LOA78-3c81_xUAAP__JRYvqA">