[clang-tools-extra] r291446 - [include-fixer] Load symbol index asynchronously.
Bill Seurer via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 10 11:31:52 PST 2017
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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
--
-Bill Seurer
More information about the cfe-commits
mailing list