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.0f
Things 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.