summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2018-03-12 19:36:29 +0000
committerAlex Lorenz <arphaman@gmail.com>2018-03-12 19:36:29 +0000
commita44c432be44ee231f77b1d803eff6723215c2481 (patch)
tree235ba8b340becf57abc9cfcdb84c7125a881df34
parente95ef87663eef176b818131dd5de8a08938dbe8c (diff)
downloadbcm5719-llvm-a44c432be44ee231f77b1d803eff6723215c2481.tar.gz
bcm5719-llvm-a44c432be44ee231f77b1d803eff6723215c2481.zip
[Tooling] Clear the PreambleSrcLocCache when preamble is discarded during reparsing
This ensures that diagnostics are not remapped to incorrect preamble locations after the second reparse with a remapped header file occurs. rdar://37502480 llvm-svn: 327322
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp1
-rw-r--r--clang/test/Index/Inputs/reparse-issue.h3
-rw-r--r--clang/test/Index/Inputs/reparse-issue.h-04
-rw-r--r--clang/test/Index/Inputs/reparse-issue.h-15
-rw-r--r--clang/test/Index/reparsed-live-issue.cpp4
5 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 473da22e9b4..d73bc284acb 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -1259,6 +1259,7 @@ ASTUnit::getMainBufferWithPrecompiledPreamble(
Preamble.reset();
PreambleDiagnostics.clear();
TopLevelDeclsInPreamble.clear();
+ PreambleSrcLocCache.clear();
PreambleRebuildCounter = 1;
}
}
diff --git a/clang/test/Index/Inputs/reparse-issue.h b/clang/test/Index/Inputs/reparse-issue.h
new file mode 100644
index 00000000000..79f1d88a7fc
--- /dev/null
+++ b/clang/test/Index/Inputs/reparse-issue.h
@@ -0,0 +1,3 @@
+
+asdf;
+
diff --git a/clang/test/Index/Inputs/reparse-issue.h-0 b/clang/test/Index/Inputs/reparse-issue.h-0
new file mode 100644
index 00000000000..f004abf1f5f
--- /dev/null
+++ b/clang/test/Index/Inputs/reparse-issue.h-0
@@ -0,0 +1,4 @@
+//
+//
+asdf;
+
diff --git a/clang/test/Index/Inputs/reparse-issue.h-1 b/clang/test/Index/Inputs/reparse-issue.h-1
new file mode 100644
index 00000000000..9f9dde858d4
--- /dev/null
+++ b/clang/test/Index/Inputs/reparse-issue.h-1
@@ -0,0 +1,5 @@
+//
+//
+//
+asdf;
+
diff --git a/clang/test/Index/reparsed-live-issue.cpp b/clang/test/Index/reparsed-live-issue.cpp
new file mode 100644
index 00000000000..fcf22cd2877
--- /dev/null
+++ b/clang/test/Index/reparsed-live-issue.cpp
@@ -0,0 +1,4 @@
+// RUN: CINDEXTEST_EDITING=1 LIBCLANG_DISABLE_CRASH_RECOVERY=1 c-index-test -test-load-source-reparse 2 none -remap-file-0=%S/Inputs/reparse-issue.h,%S/Inputs/reparse-issue.h-0 -remap-file-1=%S/Inputs/reparse-issue.h,%S/Inputs/reparse-issue.h-1 -- %s 2>&1 | FileCheck %s
+#include "Inputs/reparse-issue.h"
+
+// CHECK: reparse-issue.h:4:1:{1:1-1:1}: error: C++ requires a type specifier for all declarations
OpenPOWER on IntegriCloud