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

    <tr>
        <th>Summary</th>
        <td>
            `-Wpreferred-type-bitfield-enum-conversion` reported in `include/clang/Basic/LangOptions.def` (ComplexRange)
        </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>
    Compiling `include-what-you-use` with Clang 21 against LLVM 20 shows the following:

```
In file included from /mnt/s/GitHub/include-what-you-use/iwyu_globals.cc:22:
In file included from /usr/lib/llvm-20/include/clang/AST/PrettyPrinter.h:17:
In file included from /usr/lib/llvm-20/include/clang/Basic/LangOptions.h:649:
/usr/lib/llvm-20/include/clang/Basic/LangOptions.def:242:1: warning: bit-field 'ComplexRange' is not wide enough to store all enumerators of preferred type 'ComplexRangeKind' [-Wpreferred-type-bitfield-enum-conversion]
  242 | ENUM_LANGOPT(ComplexRange, ComplexRangeKind, 2, CX_None, "Enable use of range reduction for complex arithmetics.")
      | ^
/usr/lib/llvm-20/include/clang/Basic/LangOptions.h:648:37: note: expanded from macro 'ENUM_LANGOPT'
  648 |   void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
      | ^
/usr/lib/llvm-20/include/clang/Basic/LangOptions.def:242:46: note: widen this field to 3 bits to store all values of 'ComplexRangeKind'
  242 | ENUM_LANGOPT(ComplexRange, ComplexRangeKind, 2, CX_None, "Enable use of range reduction for complex arithmetics.")
      | ^
/usr/lib/llvm-20/include/clang/Basic/LangOptions.def:242:1: note: preferred type for bit-field 'ComplexRangeKind' specified here
  242 | ENUM_LANGOPT(ComplexRange, ComplexRangeKind, 2, CX_None, "Enable use of range reduction for complex arithmetics.")
      | ^
/usr/lib/llvm-20/include/clang/Basic/LangOptions.h:495:3: note: expanded from macro 'ENUM_LANGOPT'
  495 |   LLVM_PREFERRED_TYPE(Type) \
      | ^
/usr/lib/llvm-20/include/llvm/Support/Compiler.h:687:47: note: expanded from macro 'LLVM_PREFERRED_TYPE'
  687 | #define LLVM_PREFERRED_TYPE(T) __attribute__((preferred_type(T)))
      | ^
```

This does not happen when you compile with Clang 21 against LLVM 21. So this either needs a backport or can be closed as already fixed.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcVk2P2zYQ_TXjy8CGNPqyDz54vVZadLNZbLZpezIocWSxpUmXpNbxvy8oO8km2RRBklMMAQYsevjmzXszI7xXO8O8hOIKiuuJGEJv3bJTjo_ikSeNlafl2u4PSiuzQygTZVo9SJ4eexGmJztMB89QJnhUoce1FmaHlKLYCWV8wJubNy-REvS9PXoMPWNntbZHZXaQrSAZnzK5PMnqV4Od0oyXWyR2zu4RqN6bAFR7oPqFCr8MDVD9LBKq1fE0bHfaNkL7WdtCtiI63_XF4IN3QLVWMarWj_spJR_iA9VtTAuoXr1-AKrvHIdwunPKBHazHrJVWv2gC66EVy1QfSPM7tUhKGv8eEGZLy50fV8syV3kI4-EpJCt8CicOdcCGxWmnWItEaiKJdf89l6YHQNVqDwaG_CoJCMbO-x6DBZ9sI5RaI1shj07EazzaDs8OO7YOZYYTgf-NOBvysgYFIqr6R_vj07j0WmjwghiGiNOW2se2XllDRTXkKwQKSeEao2b299fbm9Wty9e3T0AzT_Gu8bPr1sjjS_-3N5aM54Boo0RjWYcPEfULp5Gx3JoI13YWYftORAKp0K_56BaPwMioMUIJ34iHCg231-dc6XnkK2yKKjIOMdvfnsQ5r2c9qJ1NlL6MQXViKfM5yMexEerJHoOQBlQdiv2DDR_iNV4I_TAQAuE6grjC4TsGn0QQbXbVvgA2XowY1-QkG2A5u_-AdkVQnX94zN_qsu8fJp7VJzB0CuPZ3EGi1nUqv9YgI8R4qi958X204vnM2u_Y_ATL0ZcX7T6O2f6A7eqUyyxZ8c_PXfRePmiiMb7Rt_li-Liuzjxtnf3m3pzf7-53j78dbe5GG-0XLH-NvjxN6D69XA4WBdH4XkoXwZQOY8NI_-arvEsvkvzmFdnUJRJ7pThLyUTM9luRQhONUPg7RZoDjR_r7RtGNMdD16eZ5J-MvYhWT1Ei0vL50HTi8OBDR57Nniyw6iGOFn_b8tIZ_janlsFq9CzQ8MsPQpsRPtPpA2jroTBhrHV1rNE4VFox0KesFNvWc4mcpnJRbYQE16mVV7Ms7Qoq0m_lKKgvCk5z-YtJU2SNJw3DaVlnki5SPOJWlJCRZLTPFmklFeztGpk2lC6KFOZdUUKecJ7ofQs1nJm3W6ivB94mWZVmWQTLRrWflzEiForefrvILQKp6j64nrilqMummHnIU-08sF_iBRU0LyEMvn6gVom6DiywhKVebLafUWjKRP8zPuLyeD0sg_h4OOuQjVQvVOhH5pZa_cfJDxmcXD2b26jjkcO4l53oeFxSf8FAAD__1AWUvE">