Use the newly available space in the bit-fields of Stmt and store the
string data in a trailing array of chars after the trailing array
of SourceLocation. This cuts the size of StringLiteral by 2 pointers.
Also refactor slightly StringLiteral::Create and StringLiteral::CreateEmpty
so that StringLiteral::Create is just responsible for the allocation, and the
constructor is responsible for doing all the initialization. This match what
is done for the other classes in general.
Two points I am wondering about:
The original version used type punning through an union. Here I am just
reinterpret_casting back and forth between char * and uint16_t */uint32_t *.
There is a FIXME in ASTWriterStmt.cpp (see the end of the diff) which says that
storing the string past the StringLiteral would cause problems with abbreviations.
The note dates from 2009 and everything *seems* to be working just fine. However
I am not familiar with this and it is possible I am missing something here.
Note that the trailing array of chars is aligned to 4 bytes
since it is after the array of SourceLocation.
Therefore I believe that the uint16_t * and uint32_t *
point to properly aligned memory. However I can add an
assertion here if needed.