From a44c432be44ee231f77b1d803eff6723215c2481 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 llvm-svn: 327322 --- clang/lib/Frontend/ASTUnit.cpp | 1 + clang/test/Index/Inputs/reparse-issue.h | 3 +++ clang/test/Index/Inputs/reparse-issue.h-0 | 4 ++++ clang/test/Index/Inputs/reparse-issue.h-1 | 5 +++++ clang/test/Index/reparsed-live-issue.cpp | 4 ++++ 5 files changed, 17 insertions(+) create mode 100644 clang/test/Index/Inputs/reparse-issue.h create mode 100644 clang/test/Index/Inputs/reparse-issue.h-0 create mode 100644 clang/test/Index/Inputs/reparse-issue.h-1 create mode 100644 clang/test/Index/reparsed-live-issue.cpp diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 473da22..d73bc28 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 0000000..79f1d88 --- /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 0000000..f004abf --- /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 0000000..9f9dde8 --- /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 0000000..fcf22cd --- /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 -- 2.7.4