libclang: fix a bug in processing invalid arguments, introduced in r201249,

pointed out by Daniel Jasper in r201329

llvm-svn: 201346
This commit is contained in:
Dmitri Gribenko 2014-02-13 16:51:38 +00:00
parent 8459762c88
commit fbe5672746
6 changed files with 58 additions and 11 deletions

View File

@ -2686,6 +2686,11 @@ static void clang_parseTranslationUnit_Impl(void *UserData) {
unsigned options = PTUI->options;
CXTranslationUnit *out_TU = PTUI->out_TU;
// Set up the initial return values.
if (out_TU)
*out_TU = NULL;
PTUI->result = CXError_Failure;
// Check arguments.
if (!CIdx || !out_TU ||
(unsaved_files == NULL && num_unsaved_files != 0)) {
@ -2693,10 +2698,6 @@ static void clang_parseTranslationUnit_Impl(void *UserData) {
return;
}
// Set up the initial return values.
*out_TU = NULL;
PTUI->result = CXError_Failure;
CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForIndexing))
@ -2826,12 +2827,8 @@ clang_parseTranslationUnit(CXIndex CIdx,
CIdx, source_filename, command_line_args, num_command_line_args,
unsaved_files, num_unsaved_files, options, &TU);
(void)Result;
// FIXME: This probably papers over a problem. If the result is not success,
// no TU should be set.
if (Result != CXError_Success)
return 0;
assert((TU && Result == CXError_Success) ||
(!TU && Result != CXError_Success));
return TU;
}

View File

@ -22,3 +22,4 @@ if(CLANG_ENABLE_REWRITER)
add_subdirectory(Format)
add_subdirectory(Sema)
endif()
add_subdirectory(libclang)

View File

@ -14,7 +14,7 @@ ifndef CLANG_LEVEL
IS_UNITTEST_LEVEL := 1
CLANG_LEVEL := ..
PARALLEL_DIRS = Basic Lex Driver
PARALLEL_DIRS = Basic Lex Driver libclang
include $(CLANG_LEVEL)/../..//Makefile.config

View File

@ -0,0 +1,7 @@
add_clang_unittest(libclangTests
LibclangTest.cpp
)
target_link_libraries(libclangTests
libclang
)

View File

@ -0,0 +1,17 @@
//===- unittests/libclang/LibclangTest.cpp --- libclang tests -------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "clang-c/Index.h"
#include "gtest/gtest.h"
TEST(libclang, TestInvalidArgs) {
EXPECT_EQ(CXError_InvalidArguments,
clang_parseTranslationUnit2(0, 0, 0, 0, 0, 0, 0, 0));
}

View File

@ -0,0 +1,25 @@
##===- unittests/libclang/Makefile -------------------------*- Makefile -*-===##
#
# The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
CLANG_LEVEL = ../..
TESTNAME = libclang
include $(CLANG_LEVEL)/../../Makefile.config
LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option
# Note that 'USEDLIBS' must include all of the core clang libraries
# when -static is given to linker on cygming.
USEDLIBS = clang.a \
clangIndex.a clangFormat.a clangRewriteCore.a \
clangFrontend.a clangDriver.a \
clangTooling.a \
clangSerialization.a clangParse.a clangSema.a \
clangAnalysis.a clangEdit.a clangAST.a clangLex.a \
clangBasic.a
include $(CLANG_LEVEL)/unittests/Makefile