Skip to content
Snippets Groups Projects
Commit 220b45c9 authored by Argyrios Kyrtzidis's avatar Argyrios Kyrtzidis
Browse files

[libclang] In lazyCreateDiags, recreate the diagnostic set if the number of diagnostics

in the ASTUnit changed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144762 91177308-0d34-0410-b5e6-96231b3b80d8
parent 32380594
No related branches found
No related tags found
No related merge requests found
#include "targeted-top.h"
// This tests that we will correctly error out on the deserialized decl.
// RUN: c-index-test -write-pch %t.h.pch %S/targeted-top.h
// RUN: env CINDEXTEST_FAILONERROR=1 not c-index-test -cursor-at=%S/targeted-nested1.h:2:16 %s -include %t.h \
// RUN: -Xclang -error-on-deserialized-decl=NestedVar1
// RUN: env CINDEXTEST_FAILONERROR=1 c-index-test -cursor-at=%S/targeted-nested1.h:2:16 %s -include %t.h \
// RUN: -Xclang -error-on-deserialized-decl=NestedVar1 2>&1 \
// RUN: | FileCheck %s
// CHECK: error: NestedVar1 was deserialized
...@@ -39,9 +39,22 @@ CXDiagnosticSetImpl::~CXDiagnosticSetImpl() { ...@@ -39,9 +39,22 @@ CXDiagnosticSetImpl::~CXDiagnosticSetImpl() {
CXDiagnosticImpl::~CXDiagnosticImpl() {} CXDiagnosticImpl::~CXDiagnosticImpl() {}
static CXDiagnosticSetImpl *lazyCreateDiags(CXTranslationUnit TU) { static CXDiagnosticSetImpl *lazyCreateDiags(CXTranslationUnit TU,
bool checkIfChanged = false) {
ASTUnit *AU = static_cast<ASTUnit *>(TU->TUData);
if (TU->Diagnostics && checkIfChanged) {
CXDiagnosticSetImpl *
Set = static_cast<CXDiagnosticSetImpl*>(TU->Diagnostics);
if (AU->stored_diag_size() != Set->getNumDiagnostics()) {
// Diagnostics in the ASTUnit were updated, reset the associated
// diagnostics.
delete Set;
TU->Diagnostics = 0;
}
}
if (!TU->Diagnostics) { if (!TU->Diagnostics) {
ASTUnit *AU = static_cast<ASTUnit *>(TU->TUData);
CXDiagnosticSetImpl *Set = new CXDiagnosticSetImpl(); CXDiagnosticSetImpl *Set = new CXDiagnosticSetImpl();
TU->Diagnostics = Set; TU->Diagnostics = Set;
...@@ -63,7 +76,7 @@ extern "C" { ...@@ -63,7 +76,7 @@ extern "C" {
unsigned clang_getNumDiagnostics(CXTranslationUnit Unit) { unsigned clang_getNumDiagnostics(CXTranslationUnit Unit) {
if (!Unit->TUData) if (!Unit->TUData)
return 0; return 0;
return lazyCreateDiags(Unit)->getNumDiagnostics(); return lazyCreateDiags(Unit, /*checkIfChanged=*/true)->getNumDiagnostics();
} }
CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, unsigned Index) { CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, unsigned Index) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment