The following program:
union A {
int f1: 3; A();
};
A::A() {}
causes the failure of the assertion "DataSize % Context.getCharWidth() == 0" at clang/lib/AST/RecordLayoutBuilder.cpp:754.
It happens because '2.4 Non-POD Class Types/II. Allocation of Members Other Than Virtual Bases/1. bit-fileds' of C++ ABI (http://mentorembedded.github.io/cxx-abi/abi.html#class-types) is implemented incorrectly: dsize(C) is not updated to include the last byte containing (part of) the bitfield.
Functions start with a lower case character.
I would just call this roundUpSizeToCharAlignment. This name, while more generic, is less confusing if we chose to use it in other places of record layout.
const uint64_t looks abnormal compared to most of clang's code, I would just go with uint64_t here.