diff options
Diffstat (limited to 'clang/lib/AST/RawCommentList.cpp')
-rw-r--r-- | clang/lib/AST/RawCommentList.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/clang/lib/AST/RawCommentList.cpp b/clang/lib/AST/RawCommentList.cpp index 791215103f0..d67eb0822f2 100644 --- a/clang/lib/AST/RawCommentList.cpp +++ b/clang/lib/AST/RawCommentList.cpp @@ -176,14 +176,15 @@ bool onlyWhitespaceBetweenComments(SourceManager &SM, } } // unnamed namespace -void RawCommentList::addComment(const RawComment &RC) { +void RawCommentList::addComment(const RawComment &RC, + llvm::BumpPtrAllocator &Allocator) { if (RC.isInvalid()) return; // Check if the comments are not in source order. while (!Comments.empty() && !SourceMgr.isBeforeInTranslationUnit( - Comments.back().getSourceRange().getBegin(), + Comments.back()->getSourceRange().getBegin(), RC.getSourceRange().getBegin())) { // If they are, just pop a few last comments that don't fit. // This happens if an \#include directive contains comments. @@ -204,12 +205,12 @@ void RawCommentList::addComment(const RawComment &RC) { // If this is the first Doxygen comment, save it (because there isn't // anything to merge it with). if (Comments.empty()) { - Comments.push_back(RC); + Comments.push_back(new (Allocator) RawComment(RC)); OnlyWhitespaceSeen = true; return; } - const RawComment &C1 = Comments.back(); + const RawComment &C1 = *Comments.back(); const RawComment &C2 = RC; // Merge comments only if there is only whitespace between them. @@ -221,11 +222,9 @@ void RawCommentList::addComment(const RawComment &RC) { C1.getEndLine(SourceMgr) + 1 >= C2.getBeginLine(SourceMgr))) { SourceRange MergedRange(C1.getSourceRange().getBegin(), C2.getSourceRange().getEnd()); - RawComment Merged(SourceMgr, MergedRange, true); - Comments.pop_back(); - Comments.push_back(Merged); + *Comments.back() = RawComment(SourceMgr, MergedRange, true); } else - Comments.push_back(RC); + Comments.push_back(new (Allocator) RawComment(RC)); OnlyWhitespaceSeen = true; } |