Move the bit-fields of FunctionProtoType into FunctionTypeBitfields. This cuts the
size of FunctionProtoType by a pointer. Additionally use llvm::TrailingObjects instead
of manually doing the casts + arithmetic.
This patch is bigger then what could be expected for the following reasons:
- As discussed before in D50631 it would be nice if there was some space left in FunctionTypeBitfields for future additions. This patch introduces an extra structure FunctionTypeExtraBitfields which is supposed to hold uncommon bits and is stored in a trailing object. The number of exception types NumExceptions is moved to this struct. As of this patch this trailing struct will only be allocated if we have > 0 types in a dynamic exception specification.
- TrailingObjects cannot (at least I think it cannot) handle repeated types. Therefore the QualType representing an exception type is wrapped in a struct ExceptionType. The ExceptionType * is then reinterpret_cast'd to QualType * which I think is fine since QualType and ExceptionType are standard-layout classes (but please correct me if wrong).
- TrailingObjects needs the definition of the various trailing classes. Therefore ExtParameterInfo, ExceptionType and FunctionTypeExtraBitfields are put in FunctionType.