From 0a8890ff454a8b5f58cf1c8e084a544f5b7e1229 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Tue, 7 Jul 2015 06:20:46 +0000 Subject: [PATCH] Don't rely on the use of non-POD types within unions. They aren't universally supported and we're not getting any benefit from using them. llvm-svn: 241564 --- clang/include/clang/AST/DeclObjC.h | 17 +++++++++++++---- clang/lib/AST/DeclObjC.cpp | 4 +++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/clang/include/clang/AST/DeclObjC.h b/clang/include/clang/AST/DeclObjC.h index 0aeb8ca4de5a..25fd59996b2a 100644 --- a/clang/include/clang/AST/DeclObjC.h +++ b/clang/include/clang/AST/DeclObjC.h @@ -610,7 +610,10 @@ public: 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; @@ -661,9 +664,15 @@ public: 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. diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp index 11a66c9c8cb2..ebe27a98c4ca 100644 --- a/clang/lib/AST/DeclObjC.cpp +++ b/clang/lib/AST/DeclObjC.cpp @@ -1251,8 +1251,10 @@ SourceRange ObjCTypeParamDecl::getSourceRange() const { ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef 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()); }