summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/ASTUnit.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-10-24 17:25:20 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-10-24 17:25:20 +0000
commit067cbfa299a963a0592e058f1c2497a3b866bb33 (patch)
tree5978900c16cc85a75a4a14819a3c66a099658ace /clang/lib/Frontend/ASTUnit.cpp
parentd48d52e7b2cae2da656cf1c512dc042b33740bc7 (diff)
downloadbcm5719-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.cpp20
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();
OpenPOWER on IntegriCloud