[clang] [Clang] Consider preferred_type in bitfield warnings (#116760) (PR #116785)
Oliver Hunt via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 25 09:12:26 PDT 2025
================
@@ -10601,19 +10608,28 @@ static bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init,
// on Windows where unfixed enums always use an underlying type of 'int'.
unsigned DiagID = 0;
if (SignedEnum && !SignedBitfield) {
- DiagID = diag::warn_unsigned_bitfield_assigned_signed_enum;
+ DiagID =
+ PTAttr == nullptr
+ ? diag::warn_unsigned_bitfield_assigned_signed_enum
+ : diag::
+ warn_preferred_type_unsigned_bitfield_assigned_signed_enum;
} else if (SignedBitfield && !SignedEnum &&
ED->getNumPositiveBits() == FieldWidth) {
- DiagID = diag::warn_signed_bitfield_enum_conversion;
+ DiagID =
+ PTAttr == nullptr
+ ? diag::warn_signed_bitfield_enum_conversion
+ : diag::warn_preferred_type_signed_bitfield_enum_conversion;
----------------
ojhunt wrote:
@AaronBallman @cor3ntin @erichkeane I was tempted to do this as a set of defs like:
```cpp
unsigned assigned_signed_enum_diag[] = {diag::warn_unsigned_bitfield_assigned_signed_enum,
diag::warn_preferred_type_unsigned_bitfield_assigned_signed_enum};
...
DiagID = assigned_signed_enum_diag[PTAttr != nullptr];
```
But that seemed like while being more concise it might be confusing, and potentially error prone?
https://github.com/llvm/llvm-project/pull/116785
More information about the cfe-commits
mailing list