diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2012-07-06 18:19:34 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2012-07-06 18:19:34 +0000 |
commit | 7dd29d4d3d1c2fdcb4917d4121c3352650f83d38 (patch) | |
tree | d3320e7aac5933cddbbcdeaf18830fe6725f7ce2 /clang/lib/AST/RawCommentList.cpp | |
parent | a98fde5d70e615e3f8189243399e20b2aa59cd39 (diff) | |
download | bcm5719-llvm-7dd29d4d3d1c2fdcb4917d4121c3352650f83d38.tar.gz bcm5719-llvm-7dd29d4d3d1c2fdcb4917d4121c3352650f83d38.zip |
Don't store pointers into a std::vector (RawCommentList::Comments). Although
currently we take address of std::vector's contents only after we finished
adding all comments (so no reallocation can happen), this will change in
future.
llvm-svn: 159845
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; } |