[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
This revision was automatically updated to reflect the committed changes. Closed by commit rGc1e08f0073e3: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI] (authored by miyuki). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94224/new/ https://reviews.llvm.org/D94224 Files: clang/include/clang/AST/DeclObjC.h clang/lib/AST/DeclObjC.cpp Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,7 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -717,17 +705,9 @@ return *(end() - 1); } - SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); - } - - SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); - } - - SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); - } + SourceLocation getLAngleLoc() const { return Brackets.getBegin(); } + SourceLocation getRAngleLoc() const { return Brackets.getEnd(); } + SourceRange getSourceRange() const { return Brackets; } /// Gather the default set of type arguments to be substituted for /// these type parameters when dealing with an unspecialized type. Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,7 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -717,17 +705,9 @@ return *(end() - 1); } - SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); - } - - SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); - } - - SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); - } + SourceLocation getLAngleLoc() const { return Brackets.getBegin(); } + SourceLocation getRAngleLoc() const { return Brackets.getEnd(); } + SourceRange getSourceRange() const { return Brackets; } /// Gather the default set of type arguments to be substituted for /// these type parameters when dealing with an unspecialized type. ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
aprantl accepted this revision. aprantl added a comment. This revision is now accepted and ready to land. That's even better! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94224/new/ https://reviews.llvm.org/D94224 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
miyuki added inline comments. Comment at: clang/include/clang/AST/DeclObjC.h:660 + /// Location of the left and right angle brackets. + alignas(ObjCTypeParamDecl *) SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. aprantl wrote: > Can you add a comment here explaining why the alignas is needed here? It's > not obvious from the context. Actually, `alignas` is not needed here. I've removed it and updated the commit message to explain why. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94224/new/ https://reviews.llvm.org/D94224 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
miyuki updated this revision to Diff 315601. miyuki edited the summary of this revision. miyuki added a comment. Removed alignas Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94224/new/ https://reviews.llvm.org/D94224 Files: clang/include/clang/AST/DeclObjC.h clang/lib/AST/DeclObjC.cpp Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,7 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -717,17 +705,9 @@ return *(end() - 1); } - SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); - } - - SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); - } - - SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); - } + SourceLocation getLAngleLoc() const { return Brackets.getBegin(); } + SourceLocation getRAngleLoc() const { return Brackets.getEnd(); } + SourceRange getSourceRange() const { return Brackets; } /// Gather the default set of type arguments to be substituted for /// these type parameters when dealing with an unspecialized type. Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,7 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -717,17 +705,9 @@ return *(end() - 1); } - SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); - } - - SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); - } - - SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); - } + SourceLocation getLAngleLoc() const { return Brackets.getBegin(); } + SourceLocation getRAngleLoc() const { return Brackets.getEnd(); } + SourceRange getSourceRange() const { return Brackets; } /// Gather the default set of type arguments to be substituted for /// these type parameters when dealing with an unspecialized type. ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
aprantl added inline comments. Comment at: clang/include/clang/AST/DeclObjC.h:660 + /// Location of the left and right angle brackets. + alignas(ObjCTypeParamDecl *) SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. Can you add a comment here explaining why the alignas is needed here? It's not obvious from the context. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94224/new/ https://reviews.llvm.org/D94224 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
miyuki updated this revision to Diff 315113. miyuki added a comment. Fixed formatting. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94224/new/ https://reviews.llvm.org/D94224 Files: clang/include/clang/AST/DeclObjC.h clang/lib/AST/DeclObjC.cpp Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,7 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + alignas(ObjCTypeParamDecl *) SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -717,17 +705,11 @@ return *(end() - 1); } - SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); - } + SourceLocation getLAngleLoc() const { return Brackets.getBegin(); } - SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); - } + SourceLocation getRAngleLoc() const { return Brackets.getEnd(); } - SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); - } + SourceRange getSourceRange() const { return Brackets; } /// Gather the default set of type arguments to be substituted for /// these type parameters when dealing with an unspecialized type. Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,7 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + alignas(ObjCTypeParamDecl *) SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -717,17 +705,11 @@ return *(end() - 1); } - SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); - } + SourceLocation getLAngleLoc() const { return Brackets.getBegin(); } - SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); - } + SourceLocation getRAngleLoc() const { return Brackets.getEnd(); } - SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); - } + SourceRange getSourceRange() const { return Brackets; } /// Gather the default set of type arguments to be substituted for /// these type parameters when dealing with an unspecialized type. ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D94224: [clang][AST] Get rid of an alignment hack in DeclObjC.h [NFCI]
miyuki created this revision. miyuki added reviewers: dexonsmith, aprantl. miyuki requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits. This patch utilizes the `alignas` specifier and removes the workaround which used a union object for the same purpose. Removing the union allows using the SourceRange class directly instead of re-implementing it with raw representations of source locations. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D94224 Files: clang/include/clang/AST/DeclObjC.h clang/lib/AST/DeclObjC.cpp Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,8 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), + NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + alignas(ObjCTypeParamDecl *) SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -718,15 +706,15 @@ } SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); +return Brackets.getBegin(); } SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); +return Brackets.getEnd(); } SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); +return Brackets; } /// Gather the default set of type arguments to be substituted for Index: clang/lib/AST/DeclObjC.cpp === --- clang/lib/AST/DeclObjC.cpp +++ clang/lib/AST/DeclObjC.cpp @@ -1461,9 +1461,8 @@ ObjCTypeParamList::ObjCTypeParamList(SourceLocation lAngleLoc, ArrayRef typeParams, SourceLocation rAngleLoc) -: NumParams(typeParams.size()) { - Brackets.Begin = lAngleLoc.getRawEncoding(); - Brackets.End = rAngleLoc.getRawEncoding(); +: Brackets(lAngleLoc, rAngleLoc), + NumParams(typeParams.size()) { std::copy(typeParams.begin(), typeParams.end(), begin()); } Index: clang/include/clang/AST/DeclObjC.h === --- clang/include/clang/AST/DeclObjC.h +++ clang/include/clang/AST/DeclObjC.h @@ -656,20 +656,8 @@ /// \endcode class ObjCTypeParamList final : private llvm::TrailingObjects { - /// Stores the components of a SourceRange as a POD. - struct PODSourceRange { -unsigned Begin; -unsigned End; - }; - - union { -/// Location of the left and right angle brackets. -PODSourceRange Brackets; - -// Used only for alignment. -ObjCTypeParamDecl *AlignmentHack; - }; - + /// Location of the left and right angle brackets. + alignas(ObjCTypeParamDecl *) SourceRange Brackets; /// The number of parameters in the list, which are tail-allocated. unsigned NumParams; @@ -718,15 +706,15 @@ } SourceLocation getLAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.Begin); +return Brackets.getBegin(); } SourceLocation getRAngleLoc() const { -return SourceLocation::getFromRawEncoding(Brackets.End); +return Brackets.getEnd(); } SourceRange getSourceRange() const { -return SourceRange(getLAngleLoc(), getRAngleLoc()); +return Brackets; } /// Gather the default set of type arguments to be substituted for ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits