[libclang] In lazyCreateDiags, recreate the diagnostic set if the number of diagnostics
in the ASTUnit changed. llvm-svn: 144762
This commit is contained in:
parent
aa9512c484
commit
f03e734876
|
@ -0,0 +1,13 @@
|
|||
|
||||
#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() {
|
|||
|
||||
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) {
|
||||
ASTUnit *AU = static_cast<ASTUnit *>(TU->TUData);
|
||||
CXDiagnosticSetImpl *Set = new CXDiagnosticSetImpl();
|
||||
TU->Diagnostics = Set;
|
||||
|
||||
|
@ -63,7 +76,7 @@ extern "C" {
|
|||
unsigned clang_getNumDiagnostics(CXTranslationUnit Unit) {
|
||||
if (!Unit->TUData)
|
||||
return 0;
|
||||
return lazyCreateDiags(Unit)->getNumDiagnostics();
|
||||
return lazyCreateDiags(Unit, /*checkIfChanged=*/true)->getNumDiagnostics();
|
||||
}
|
||||
|
||||
CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, unsigned Index) {
|
||||
|
|
Loading…
Reference in New Issue