From: Alex Lorenz Date: Mon, 12 Mar 2018 19:36:29 +0000 (+0000) Subject: [Tooling] Clear the PreambleSrcLocCache when preamble is discarded during reparsing X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=07fe671aaad3e93b9f7178ae1309304a73a3b3bf;p=clang [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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327322 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index 473da22e9b..d73bc284ac 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -1259,6 +1259,7 @@ ASTUnit::getMainBufferWithPrecompiledPreamble( Preamble.reset(); PreambleDiagnostics.clear(); TopLevelDeclsInPreamble.clear(); + PreambleSrcLocCache.clear(); PreambleRebuildCounter = 1; } } diff --git a/test/Index/Inputs/reparse-issue.h b/test/Index/Inputs/reparse-issue.h new file mode 100644 index 0000000000..79f1d88a7f --- /dev/null +++ b/test/Index/Inputs/reparse-issue.h @@ -0,0 +1,3 @@ + +asdf; + diff --git a/test/Index/Inputs/reparse-issue.h-0 b/test/Index/Inputs/reparse-issue.h-0 new file mode 100644 index 0000000000..f004abf1f5 --- /dev/null +++ b/test/Index/Inputs/reparse-issue.h-0 @@ -0,0 +1,4 @@ +// +// +asdf; + diff --git a/test/Index/Inputs/reparse-issue.h-1 b/test/Index/Inputs/reparse-issue.h-1 new file mode 100644 index 0000000000..9f9dde858d --- /dev/null +++ b/test/Index/Inputs/reparse-issue.h-1 @@ -0,0 +1,5 @@ +// +// +// +asdf; + diff --git a/test/Index/reparsed-live-issue.cpp b/test/Index/reparsed-live-issue.cpp new file mode 100644 index 0000000000..fcf22cd287 --- /dev/null +++ b/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