class ObjCTypeParamList {
union {
/// Location of the left and right angle brackets.
- SourceRange Brackets;
+ struct {
+ unsigned Begin;
+ unsigned End;
+ } Brackets;
// Used only for alignment.
ObjCTypeParamDecl *AlignmentHack;
return *(end() - 1);
}
- SourceLocation getLAngleLoc() const { return Brackets.getBegin(); }
- SourceLocation getRAngleLoc() const { return Brackets.getEnd(); }
- SourceRange getSourceRange() const { return Brackets; }
+ SourceLocation getLAngleLoc() const {
+ return SourceLocation::getFromRawEncoding(Brackets.Begin);
+ }
+ SourceLocation getRAngleLoc() const {
+ return SourceLocation::getFromRawEncoding(Brackets.End);
+ }
+ SourceRange getSourceRange() const {
+ return SourceRange(getLAngleLoc(), getRAngleLoc());
+ }
/// Gather the default set of type arguments to be substituted for
/// these type parameters when dealing with an unspecialized type.
ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc,
ArrayRef<ObjCTypeParamDecl *> typeParams,
SourceLocation rAngleLoc)
- : Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size())
+ : NumParams(typeParams.size())
{
+ Brackets.Begin = lAngleLoc.getRawEncoding();
+ Brackets.End = rAngleLoc.getRawEncoding();
std::copy(typeParams.begin(), typeParams.end(), begin());
}