I didn't manage to reproduce this. Does adding ${PTHREAD_LIB} to LINK_LIBS of tools/clang/tools/extra/include-fixer/plugin/CMakeLists.txt help?
On Tue, Jan 10, 2017 at 8:31 PM, Bill Seurer <seu...@linux.vnet.ibm.com> wrote: > On 01/09/2017 09:18 AM, Benjamin Kramer via cfe-commits wrote: >> >> Author: d0k >> Date: Mon Jan 9 09:18:28 2017 >> New Revision: 291446 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=291446&view=rev >> Log: >> [include-fixer] Load symbol index asynchronously. >> >> We don't actually need the index until parse time, so fetch it in the >> background and start parsing. By the time it is actually needed it's >> likely that the loading phase has completed in the background. > > > This update causes a linker error on ppc64le on a Release+Asserts+Shared > build. > > cmake with -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON > -DBUILD_SHARED_LIBS=ON > > http://lab.llvm.org:8011/builders/clang-ppc64le-linux-multistage/builds/754 > > > Details: > > [117/123] Linking CXX shared library > lib/libclangIncludeFixerPlugin.so.40.0svn > FAILED: : && /home/seurer/gcc/install/gcc-5.4.0/bin/g++ -fPIC -fPIC > -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings > -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long > -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment > -Werror=date-time -std=c++11 -ffunction-sections -fdata-sections -fno-common > -Woverloaded-virtual -fno-strict-aliasing -O3 > -L/home/seurer/gcc/install/gcc-5.4.0/lib64 -Wl,-z,defs > -Wl,-rpath-link,/home/seurer/llvm/build/llvm-test2/./lib -Wl,-O3 > -Wl,--gc-sections -shared -Wl,-soname,libclangIncludeFixerPlugin.so.40 -o > lib/libclangIncludeFixerPlugin.so.40.0svn > tools/clang/tools/extra/include-fixer/plugin/CMakeFiles/clangIncludeFixerPlugin.dir/IncludeFixerPlugin.cpp.o > lib/libclangAST.so.40.0svn lib/libclangBasic.so.40.0svn > lib/libclangFrontend.so.40.0svn lib/libclangIncludeFixer.so.40.0svn > lib/libclangParse.so.40.0svn lib/libclangSema.so.40.0svn > lib/libclangTooling.so.40.0svn lib/libLLVMSupport.so.40.0svn > -Wl,-rpath,"\$ORIGIN/../lib" && : > tools/clang/tools/extra/include-fixer/plugin/CMakeFiles/clangIncludeFixerPlugin.dir/IncludeFixerPlugin.cpp.o:(.toc+0xb0): > undefined reference to `pthread_create' > collect2: error: ld returned 1 exit status > [117/123] Building CXX object > tools/clang/tools/extra/include-fixer/tool/CMakeFiles/clang-include-fixer.dir/ClangIncludeFixer.cpp.o > ninja: build stopped: subcommand failed. > [1/7] Linking CXX shared library lib/libclangIncludeFixerPlugin.so.40.0svn > FAILED: : && /home/seurer/gcc/install/gcc-5.4.0/bin/g++ -fPIC -fPIC > -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings > -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long > -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment > -Werror=date-time -std=c++11 -ffunction-sections -fdata-sections -fno-common > -Woverloaded-virtual -fno-strict-aliasing -O3 > -L/home/seurer/gcc/install/gcc-5.4.0/lib64 -Wl,-z,defs > -Wl,-rpath-link,/home/seurer/llvm/build/llvm-test2/./lib -Wl,-O3 > -Wl,--gc-sections -shared -Wl,-soname,libclangIncludeFixerPlugin.so.40 -o > lib/libclangIncludeFixerPlugin.so.40.0svn > tools/clang/tools/extra/include-fixer/plugin/CMakeFiles/clangIncludeFixerPlugin.dir/IncludeFixerPlugin.cpp.o > lib/libclangAST.so.40.0svn lib/libclangBasic.so.40.0svn > lib/libclangFrontend.so.40.0svn lib/libclangIncludeFixer.so.40.0svn > lib/libclangParse.so.40.0svn lib/libclangSema.so.40.0svn > lib/libclangTooling.so.40.0svn lib/libLLVMSupport.so.40.0svn > -Wl,-rpath,"\$ORIGIN/../lib" && : > tools/clang/tools/extra/include-fixer/plugin/CMakeFiles/clangIncludeFixerPlugin.dir/IncludeFixerPlugin.cpp.o:(.toc+0xb0): > undefined reference to `pthread_create' > collect2: error: ld returned 1 exit status > > > > > >> Modified: >> clang-tools-extra/trunk/include-fixer/SymbolIndexManager.cpp >> clang-tools-extra/trunk/include-fixer/SymbolIndexManager.h >> clang-tools-extra/trunk/include-fixer/plugin/IncludeFixerPlugin.cpp >> clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp >> clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp >> >> Modified: clang-tools-extra/trunk/include-fixer/SymbolIndexManager.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/SymbolIndexManager.cpp?rev=291446&r1=291445&r2=291446&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/include-fixer/SymbolIndexManager.cpp >> (original) >> +++ clang-tools-extra/trunk/include-fixer/SymbolIndexManager.cpp Mon Jan >> 9 09:18:28 2017 >> @@ -64,7 +64,7 @@ SymbolIndexManager::search(llvm::StringR >> do { >> std::vector<clang::find_all_symbols::SymbolInfo> Symbols; >> for (const auto &DB : SymbolIndices) { >> - auto Res = DB->search(Names.back().str()); >> + auto Res = DB.get()->search(Names.back()); >> Symbols.insert(Symbols.end(), Res.begin(), Res.end()); >> } >> >> >> Modified: clang-tools-extra/trunk/include-fixer/SymbolIndexManager.h >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/SymbolIndexManager.h?rev=291446&r1=291445&r2=291446&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/include-fixer/SymbolIndexManager.h (original) >> +++ clang-tools-extra/trunk/include-fixer/SymbolIndexManager.h Mon Jan 9 >> 09:18:28 2017 >> @@ -13,6 +13,7 @@ >> #include "SymbolIndex.h" >> #include "find-all-symbols/SymbolInfo.h" >> #include "llvm/ADT/StringRef.h" >> +#include <future> >> >> namespace clang { >> namespace include_fixer { >> @@ -21,8 +22,8 @@ namespace include_fixer { >> /// to an indentifier in the source code from multiple symbol databases. >> class SymbolIndexManager { >> public: >> - void addSymbolIndex(std::unique_ptr<SymbolIndex> DB) { >> - SymbolIndices.push_back(std::move(DB)); >> + void addSymbolIndex(std::function<std::unique_ptr<SymbolIndex>()> F) { >> + SymbolIndices.push_back(std::async(std::launch::async, F)); >> } >> >> /// Search for header files to be included for an identifier. >> @@ -39,7 +40,7 @@ public: >> search(llvm::StringRef Identifier, bool IsNestedSearch = true) const; >> >> private: >> - std::vector<std::unique_ptr<SymbolIndex>> SymbolIndices; >> + std::vector<std::shared_future<std::unique_ptr<SymbolIndex>>> >> SymbolIndices; >> }; >> >> } // namespace include_fixer >> >> Modified: >> clang-tools-extra/trunk/include-fixer/plugin/IncludeFixerPlugin.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/plugin/IncludeFixerPlugin.cpp?rev=291446&r1=291445&r2=291446&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/include-fixer/plugin/IncludeFixerPlugin.cpp >> (original) >> +++ clang-tools-extra/trunk/include-fixer/plugin/IncludeFixerPlugin.cpp >> Mon Jan 9 09:18:28 2017 >> @@ -61,23 +61,26 @@ public: >> Input = Arg.substr(strlen("-input=")); >> } >> >> - llvm::ErrorOr<std::unique_ptr<include_fixer::YamlSymbolIndex>> >> SymbolIdx( >> - nullptr); >> - if (DB == "yaml") { >> - if (!Input.empty()) { >> - SymbolIdx = >> include_fixer::YamlSymbolIndex::createFromFile(Input); >> - } else { >> - // If we don't have any input file, look in the directory of the >> first >> - // file and its parents. >> - const FrontendOptions &FO = CI.getFrontendOpts(); >> - SmallString<128> AbsolutePath( >> - tooling::getAbsolutePath(FO.Inputs[0].getFile())); >> - StringRef Directory = llvm::sys::path::parent_path(AbsolutePath); >> - SymbolIdx = include_fixer::YamlSymbolIndex::createFromDirectory( >> - Directory, "find_all_symbols_db.yaml"); >> + std::string InputFile = CI.getFrontendOpts().Inputs[0].getFile(); >> + auto CreateYamlIdx = [=]() -> >> std::unique_ptr<include_fixer::SymbolIndex> { >> + llvm::ErrorOr<std::unique_ptr<include_fixer::YamlSymbolIndex>> >> SymbolIdx( >> + nullptr); >> + if (DB == "yaml") { >> + if (!Input.empty()) { >> + SymbolIdx = >> include_fixer::YamlSymbolIndex::createFromFile(Input); >> + } else { >> + // If we don't have any input file, look in the directory of >> the first >> + // file and its parents. >> + SmallString<128> >> AbsolutePath(tooling::getAbsolutePath(InputFile)); >> + StringRef Directory = >> llvm::sys::path::parent_path(AbsolutePath); >> + SymbolIdx = >> include_fixer::YamlSymbolIndex::createFromDirectory( >> + Directory, "find_all_symbols_db.yaml"); >> + } >> } >> - } >> - SymbolIndexMgr->addSymbolIndex(std::move(*SymbolIdx)); >> + return std::move(*SymbolIdx); >> + }; >> + >> + SymbolIndexMgr->addSymbolIndex(std::move(CreateYamlIdx)); >> return true; >> } >> >> >> Modified: clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp?rev=291446&r1=291445&r2=291446&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp >> (original) >> +++ clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp Mon >> Jan 9 09:18:28 2017 >> @@ -179,30 +179,36 @@ createSymbolIndexManager(StringRef FileP >> find_all_symbols::SymbolInfo::SymbolKind::Unknown, >> CommaSplits[I].trim(), 1, {}, /*NumOccurrences=*/E - I)); >> } >> - SymbolIndexMgr->addSymbolIndex( >> - llvm::make_unique<include_fixer::InMemorySymbolIndex>(Symbols)); >> + SymbolIndexMgr->addSymbolIndex([=]() { >> + return >> llvm::make_unique<include_fixer::InMemorySymbolIndex>(Symbols); >> + }); >> break; >> } >> case yaml: { >> - llvm::ErrorOr<std::unique_ptr<include_fixer::YamlSymbolIndex>> >> DB(nullptr); >> - if (!Input.empty()) { >> - DB = include_fixer::YamlSymbolIndex::createFromFile(Input); >> - } else { >> - // If we don't have any input file, look in the directory of the >> first >> - // file and its parents. >> - SmallString<128> AbsolutePath(tooling::getAbsolutePath(FilePath)); >> - StringRef Directory = llvm::sys::path::parent_path(AbsolutePath); >> - DB = include_fixer::YamlSymbolIndex::createFromDirectory( >> - Directory, "find_all_symbols_db.yaml"); >> - } >> + auto CreateYamlIdx = [=]() -> >> std::unique_ptr<include_fixer::SymbolIndex> { >> + llvm::ErrorOr<std::unique_ptr<include_fixer::YamlSymbolIndex>> DB( >> + nullptr); >> + if (!Input.empty()) { >> + DB = include_fixer::YamlSymbolIndex::createFromFile(Input); >> + } else { >> + // If we don't have any input file, look in the directory of the >> + // first >> + // file and its parents. >> + SmallString<128> >> AbsolutePath(tooling::getAbsolutePath(FilePath)); >> + StringRef Directory = llvm::sys::path::parent_path(AbsolutePath); >> + DB = include_fixer::YamlSymbolIndex::createFromDirectory( >> + Directory, "find_all_symbols_db.yaml"); >> + } >> >> - if (!DB) { >> - llvm::errs() << "Couldn't find YAML db: " << >> DB.getError().message() >> - << '\n'; >> - return nullptr; >> - } >> + if (!DB) { >> + llvm::errs() << "Couldn't find YAML db: " << >> DB.getError().message() >> + << '\n'; >> + return nullptr; >> + } >> + return std::move(*DB); >> + }; >> >> - SymbolIndexMgr->addSymbolIndex(std::move(*DB)); >> + SymbolIndexMgr->addSymbolIndex(std::move(CreateYamlIdx)); >> break; >> } >> } >> >> Modified: >> clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp?rev=291446&r1=291445&r2=291446&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp >> (original) >> +++ clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp >> Mon Jan 9 09:18:28 2017 >> @@ -85,8 +85,9 @@ static std::string runIncludeFixer( >> 1, {}), >> }; >> auto SymbolIndexMgr = >> llvm::make_unique<include_fixer::SymbolIndexManager>(); >> - SymbolIndexMgr->addSymbolIndex( >> - llvm::make_unique<include_fixer::InMemorySymbolIndex>(Symbols)); >> + SymbolIndexMgr->addSymbolIndex([=]() { >> + return >> llvm::make_unique<include_fixer::InMemorySymbolIndex>(Symbols); >> + }); >> >> std::vector<IncludeFixerContext> FixerContexts; >> IncludeFixerActionFactory Factory(*SymbolIndexMgr, FixerContexts, >> "llvm"); >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > > > -- > > -Bill Seurer > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits