diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-10-24 17:25:20 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-10-24 17:25:20 +0000 |
commit | 067cbfa299a963a0592e058f1c2497a3b866bb33 (patch) | |
tree | 5978900c16cc85a75a4a14819a3c66a099658ace /clang/lib/Frontend/ASTUnit.cpp | |
parent | d48d52e7b2cae2da656cf1c512dc042b33740bc7 (diff) | |
download | bcm5719-llvm-067cbfa299a963a0592e058f1c2497a3b866bb33.tar.gz bcm5719-llvm-067cbfa299a963a0592e058f1c2497a3b866bb33.zip |
[libclang] Make sure we don't try to erase past the StoredDiagnostics vector.
Ted came upon the bug but I couldn't make a test out of it.
llvm-svn: 142805
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 032adf3876a..c1534352253 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -919,9 +919,7 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) { CleanTemporaryFiles(); if (!OverrideMainBuffer) { - StoredDiagnostics.erase( - StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver, - StoredDiagnostics.end()); + StoredDiagnostics.erase(stored_diag_afterDriver_begin(), stored_diag_end()); TopLevelDeclsInPreamble.clear(); } @@ -1002,6 +1000,7 @@ error: } StoredDiagnostics.clear(); + NumStoredDiagnosticsFromDriver = 0; return true; } @@ -1393,9 +1392,7 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( // Clear out old caches and data. getDiagnostics().Reset(); ProcessWarningOptions(getDiagnostics(), Clang->getDiagnosticOpts()); - StoredDiagnostics.erase( - StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver, - StoredDiagnostics.end()); + StoredDiagnostics.erase(stored_diag_afterDriver_begin(), stored_diag_end()); TopLevelDecls.clear(); TopLevelDeclsInPreamble.clear(); @@ -1438,11 +1435,8 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( // of preamble diagnostics. PreambleDiagnostics.clear(); PreambleDiagnostics.insert(PreambleDiagnostics.end(), - StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver, - StoredDiagnostics.end()); - StoredDiagnostics.erase( - StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver, - StoredDiagnostics.end()); + stored_diag_afterDriver_begin(), stored_diag_end()); + StoredDiagnostics.erase(stored_diag_afterDriver_begin(), stored_diag_end()); // Keep track of the preamble we precompiled. PreambleFile = FrontendOpts.OutputFile; @@ -2196,8 +2190,8 @@ void ASTUnit::CodeComplete(StringRef File, unsigned Line, unsigned Column, // make that override happen and introduce the preamble. PreprocessorOpts.DisableStatCache = true; StoredDiagnostics.insert(StoredDiagnostics.end(), - this->StoredDiagnostics.begin(), - this->StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver); + stored_diag_begin(), + stored_diag_afterDriver_begin()); if (OverrideMainBuffer) { PreprocessorOpts.addRemappedFile(OriginalSourceFile, OverrideMainBuffer); PreprocessorOpts.PrecompiledPreambleBytes.first = Preamble.size(); |