CIndex: For the time being, don't return translation units if we encounter an error during parsing.
- We need to be more careful in the rest of CIndex if we are to handle possibly-invalid ASTs, and don't have much experience with this yet. llvm-svn: 90643
This commit is contained in:
parent
4fb3d9fcd7
commit
72fe5b1bcc
|
@ -0,0 +1,8 @@
|
||||||
|
// RUN: not c-index-test -test-load-source local %s > %t 2> %t.err
|
||||||
|
// RUN: FileCheck %s < %t.err
|
||||||
|
|
||||||
|
// CHECK: error: expected identifier or '('
|
||||||
|
// CHECK: Unable to load translation unit!
|
||||||
|
|
||||||
|
int foo;
|
||||||
|
int
|
|
@ -508,10 +508,20 @@ clang_createTranslationUnitFromSourceFile(CXIndex CIdx,
|
||||||
command_line_args + num_command_line_args);
|
command_line_args + num_command_line_args);
|
||||||
|
|
||||||
void *MainAddr = (void *)(uintptr_t)clang_createTranslationUnit;
|
void *MainAddr = (void *)(uintptr_t)clang_createTranslationUnit;
|
||||||
return ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(),
|
|
||||||
|
unsigned NumErrors = CXXIdx->getDiags().getNumErrors();
|
||||||
|
llvm::OwningPtr<ASTUnit> Unit(
|
||||||
|
ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(),
|
||||||
CXXIdx->getDiags(), "<clang>", MainAddr,
|
CXXIdx->getDiags(), "<clang>", MainAddr,
|
||||||
CXXIdx->getOnlyLocalDecls(),
|
CXXIdx->getOnlyLocalDecls(),
|
||||||
/* UseBumpAllocator = */ true);
|
/* UseBumpAllocator = */ true));
|
||||||
|
|
||||||
|
// FIXME: Until we have broader testing, just drop the entire AST if we
|
||||||
|
// encountered an error.
|
||||||
|
if (NumErrors != CXXIdx->getDiags().getNumErrors())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return Unit.take();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build up the arguments for invoking 'clang'.
|
// Build up the arguments for invoking 'clang'.
|
||||||
|
|
Loading…
Reference in New Issue