<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">