From 07fe671aaad3e93b9f7178ae1309304a73a3b3bf Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Mon, 12 Mar 2018 19:36:29 +0000 Subject: [PATCH] [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 --- lib/Frontend/ASTUnit.cpp | 1 + test/Index/Inputs/reparse-issue.h | 3 +++ test/Index/Inputs/reparse-issue.h-0 | 4 ++++ test/Index/Inputs/reparse-issue.h-1 | 5 +++++ test/Index/reparsed-live-issue.cpp | 4 ++++ 5 files changed, 17 insertions(+) create mode 100644 test/Index/Inputs/reparse-issue.h create mode 100644 test/Index/Inputs/reparse-issue.h-0 create mode 100644 test/Index/Inputs/reparse-issue.h-1 create mode 100644 test/Index/reparsed-live-issue.cpp 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 -- 2.40.0