From 1bf8d9107b77abeefc84ba41bb49e802a2533ff3 Mon Sep 17 00:00:00 2001 From: Dmitri Gribenko Date: Tue, 18 Feb 2014 15:20:02 +0000 Subject: [PATCH] libclang: fix a bug in processing invalid arguments, introduced in r201249 Recommit r201346, reverted in r201373. llvm-svn: 201578 --- clang/test/Unit/lit.cfg | 24 +++++++++++++++++------- clang/test/Unit/lit.site.cfg.in | 1 - clang/tools/libclang/CIndex.cpp | 17 +++++++---------- clang/unittests/CMakeLists.txt | 3 +++ clang/unittests/Makefile | 2 +- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/clang/test/Unit/lit.cfg b/clang/test/Unit/lit.cfg index f39fded..01b54c7 100644 --- a/clang/test/Unit/lit.cfg +++ b/clang/test/Unit/lit.cfg @@ -3,6 +3,7 @@ # Configuration file for the 'lit' test runner. import os +import platform import lit.formats import lit.util @@ -85,10 +86,19 @@ if config.test_exec_root is None: lit_config.load_config(config, site_cfg) raise SystemExit -# If necessary, point the dynamic loader at libLLVM.so. -if config.enable_shared: - shlibpath = config.environment.get(config.shlibpath_var,'') - if shlibpath: - shlibpath = os.pathsep + shlibpath - shlibpath = config.shlibdir + shlibpath - config.environment[config.shlibpath_var] = shlibpath +shlibpath_var = '' +if platform.system() == 'Linux': + shlibpath_var = 'LD_LIBRARY_PATH' +elif platform.system() == 'Darwin': + shlibpath_var = 'DYLD_LIBRARY_PATH' +elif platform.system() == 'Windows': + shlibpath_var = 'PATH' + +# Point the dynamic loader at dynamic libraries in 'lib'. +llvm_libs_dir = getattr(config, 'llvm_libs_dir', None) +if not llvm_libs_dir: + lit_config.fatal('No LLVM libs dir set!') +shlibpath = os.path.pathsep.join((llvm_libs_dir, + config.environment.get(shlibpath_var,''))) +config.environment[shlibpath_var] = shlibpath + diff --git a/clang/test/Unit/lit.site.cfg.in b/clang/test/Unit/lit.site.cfg.in index a255cdc..37e8cb0 100644 --- a/clang/test/Unit/lit.site.cfg.in +++ b/clang/test/Unit/lit.site.cfg.in @@ -10,7 +10,6 @@ config.llvm_build_mode = "@LLVM_BUILD_MODE@" config.clang_obj_root = "@CLANG_BINARY_DIR@" config.enable_shared = @ENABLE_SHARED@ config.shlibdir = "@SHLIBDIR@" -config.shlibpath_var = "@SHLIBPATH_VAR@" config.target_triple = "@TARGET_TRIPLE@" # Support substitution of the tools_dir, libs_dirs, and build_mode with user diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index a74feab..e862889 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -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(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; } diff --git a/clang/unittests/CMakeLists.txt b/clang/unittests/CMakeLists.txt index f00008e..cc13226 100644 --- a/clang/unittests/CMakeLists.txt +++ b/clang/unittests/CMakeLists.txt @@ -22,3 +22,6 @@ if(CLANG_ENABLE_REWRITER) add_subdirectory(Format) add_subdirectory(Sema) endif() +if(NOT WIN32) # FIXME:Investigating. + add_subdirectory(libclang) +endif() diff --git a/clang/unittests/Makefile b/clang/unittests/Makefile index e4fbe58..9b95a6e 100644 --- a/clang/unittests/Makefile +++ b/clang/unittests/Makefile @@ -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 -- 2.7.4