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

    <tr>
        <th>Summary</th>
        <td>
            `-Wpreferred-type-bitfield-enum-conversion` reported in `include/clang/Basic/LangOptions.def`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            code-quality
      </td>
    </tr>

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

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

<pre>
    Doing a downstream `include-what-you-use` with Clang 21 against LLVM 21 shows the following warning:

```
In file included from /mnt/s/GitHub/include-what-you-use/iwyu_globals.cc:22:
In file included from /usr/lib/llvm-21/include/clang/AST/PrettyPrinter.h:17:
In file included from /usr/lib/llvm-21/include/clang/Basic/LangOptions.h:663:
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:350:1: warning: assigning value of preferred signed enum type 'FPEvalMethodKind' to unsigned bit-field 'FPEvalMethod'; negative enumerators of enum 'FPEvalMethodKind' will be converted to positive values [-Wpreferred-type-bitfield-enum-conversion]
  350 | BENIGN_ENUM_LANGOPT(FPEvalMethod, FPEvalMethodKind, 3, FEM_UnsetOnCommandLine, "FP type used for floating point arithmetic")
 | ^
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:67:6: note: expanded from macro 'BENIGN_ENUM_LANGOPT'
   67 | COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
      | ^
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:62:6: note: expanded from macro 'COMPATIBLE_ENUM_LANGOPT'
   62 |      ENUM_LANGOPT(Name, Type, Bits, Default, Description)
      | ^
/usr/lib/llvm-21/include/clang/Basic/LangOptions.h:661:10: note: expanded from macro 'ENUM_LANGOPT'
  661 |     Name = static_cast<unsigned>(Value); \
      | ^
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:350:1: note: consider making the bit-field type signed
  350 | BENIGN_ENUM_LANGOPT(FPEvalMethod, FPEvalMethodKind, 3, FEM_UnsetOnCommandLine, "FP type used for floating point arithmetic")
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:67:6: note: expanded from macro 'BENIGN_ENUM_LANGOPT'
   67 | COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:62:6: note: expanded from macro 'COMPATIBLE_ENUM_LANGOPT'
   62 | ENUM_LANGOPT(Name, Type, Bits, Default, Description)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/llvm-21/include/clang/Basic/LangOptions.h:501:3: note: expanded from macro 'ENUM_LANGOPT'
  501 |   unsigned Name : Bits;
 |   ^~~~~~~~
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:350:1: note: preferred type for bit-field 'FPEvalMethodKind' specified here
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:67:6: note: expanded from macro 'BENIGN_ENUM_LANGOPT'
   67 | COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
      | ^
/usr/lib/llvm-21/include/clang/Basic/LangOptions.def:62:6: note: expanded from macro 'COMPATIBLE_ENUM_LANGOPT'
   62 |      ENUM_LANGOPT(Name, Type, Bits, Default, Description)
      | ^
/usr/lib/llvm-21/include/clang/Basic/LangOptions.h:500:3: note: expanded from macro 'ENUM_LANGOPT'
  500 |   LLVM_PREFERRED_TYPE(Type) \
      | ^
/usr/lib/llvm-21/include/llvm/Support/Compiler.h:708:47: note: expanded from macro 'LLVM_PREFERRED_TYPE'
  708 | #define LLVM_PREFERRED_TYPE(T) __attribute__((preferred_type(T)))
      | ^
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWEtv4zYX_TX0hnBAk5ZkL7SQH5pv8OVhZDJTdCVQ0pXFliJVkrLrTX97QdpO0mkCBDMZ1MAIApRY9L3n3Mchr7m1YqsAUhQtULQa8cG12qSNMLDnOxiVuj6kKy3UFnNc672yzgDvMIqJUJUcahjvW-7GBz2MBwsoJngvXIuXkqstphPMt1wo6_D19Zcb_79t9d5i1wJutJR67y3vuVFCbRHLEAl3TE43yT4q3AgJ-OStxo3RHUY075RDNLeI5h-E-99QIpq_iIjmYn8Yiq3UJZf2qqoQyyg9-nrV-GANorkU3qqUu25MJ0_2Ec0rTw_RPPv0gGi-MeDcYWOEcmCuWsSySfJODhbcigrR_Jqr7V3vhFY2OIhjdgrX99mqoUEsYxHxoBHLnuUCH2vDJ2jH5QBYN7g30IAxUONQNjUGNXTYHXrAiCb5Zr3j8gZcq-v_C1UjmmCn8aBOi0vhxo0AWX-9GNEEsQVWsOVO7CBYBcOdNtZ7DU5esb8XUuIScKXVDoyD2nvstRXBUABuMYoW418esY893nEpXMAy9tbHx69boRWKVohkGLOIYJQs8WJ9-_HDbbG-_XxTXGe3H-42D4jO_ol-if8NbYlZeLG-KT4rC-5OLXXXcVVfCwX-DaI03xxjN1hfGtrgRmrufMR7LZTD3AjXduB82iiicw_MY0LR-r1SH_tKjX26lXbgn_Bnz9VjrXa8MtoH_8U4JCFUOE4CrOXdzSZ7-Li4Xn8drlveBc4Phz48F8JZ_1xBwwfpjn_ayoiA7cQ0XO9Nl76R7qtczpRpgBauyyN7lAjf0BPyBrIvMYzjySNDzwgjtsLWcSeqouLWIbY8NzZia0RnX3yveTZsgVG0_FEZfKZVZ1aVVlbUYHDHf_fN43eXJ60JHXYCesmN_TxYf_13108mLBcSrHeWpQuI0vuIWER8p7Nv1LCInDXs8QxykrLsGAO2OG-p-BnNHyhVTweooA9eGl49FZ2POLaHSjQCatyCgZ-sPy-1wy54448I-a6eISeCfmQrNvfrfH1_v14VD79u_DZ_JDf_9i3ef4Zo_mnoe238DLfUXS_kaXJKyAyxbJq8Af2L-I4kEjI7gqKshkYoeI2MZ1IU3DkjysFBUSA6Q3T22KaFC3TDwtP9AunzvDqqU1bP2ZyPIJ0k02jGJixKRm3KExLNoWmSSQVVPCW8mlZlCXReT2M-Y8lIpJTQiEzpjMzJfJJcVfOmKmeTGedx1BBC0JRAx4W88uG70mY7EtYOkE5YEhMykrwEacMUT2mlaxj_MXAp3MGfL6LVyKQhFeWwtWhKpLDOPllywklIUUzePiTFBBvw-YMaC_Xs54A3NGNMRoORaetcb_0QS3NE861w7VBeVbp7KpEAuTf6N6h8nQTCfuA_cd6l9O8AAAD___ogTo8">