courbet added a comment.

Thanks for the details, this explains the motivation well. I think the key 
point is the combination of:

> It turns out doing anything useful with a bitfield will eventually result in 
> an integral promotion, which mandates that the type must be 'int' if it fits
> conv.prom/5: <https://eel.is/c++draft/conv.prom#5>
>
>> A prvalue for an integral bit-field ([class.bit]) can be converted to a 
>> prvalue of type **int if int can represent all the values of the 
>> bit-field**; otherwise, it can be converted to unsigned int if unsigned int 
>> can represent all the values of the bit-field. If the bit-field is larger 
>> yet, no integral promotion applies to it. If the bit-field has an enumerated 
>> type, it is treated as any other value of that type for promotion purposes.

and

> shift expression is the only one whose return type depends only on the 
> //left// operand

So adding that as a comment above `ShiftingWidenedBitfieldValue` would help.

Maybe also add a note in the comment that we are not interested in whether the 
shift itself might overflow.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114105/new/

https://reviews.llvm.org/D114105

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to