The following revision follows D80115 since @MyDeveloperDay and I apparently both had the same idea at the same time, for https://bugs.llvm.org/show_bug.cgi?id=45816 and my efforts on tooling support for AMDVLK, respectively.
This option aligns adjacent bitfield separators across lines, in a manner similar to AlignConsecutiveAssignments and friends.
Example:
struct RawFloat {
uint32_t sign : 1;
uint32_t exponent : 8;
uint32_t mantissa : 23;
};would become
struct RawFloat {
uint32_t sign : 1;
uint32_t exponent : 8;
uint32_t mantissa : 23;
};This also handles c++2a style bitfield-initializers with AlignConsecutiveAssignments.
struct RawFloat {
uint32_t sign : 1 = 0;
uint32_t exponent : 8 = 127;
uint32_t mantissa : 23 = 0;
}; // defaults to 1.0fThings this change does not do:
- Align multiple comma-chained bitfield variables. None of the other AlignConsecutive* options seem to implement that either.
- Detect bitfields that have a width specified with something other than a numeric literal (ie, int a : SOME_MACRO;). That'd be fairly difficult to parse and is rare.