diff --git a/AUTHORS.txt b/AUTHORS.txt index 1e7eaa06..3d6e7731 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -6,5 +6,6 @@ Eberhard Gräther (@egraether) Malte Langkabel (@mlangkabel) Manuel Dobusch Viktoria Pfausler +Louis St-Amour (@LouisStAmour) Note: (@user) means a github user name. diff --git a/README.md b/README.md index f0a625f4..ec4044f5 100644 --- a/README.md +++ b/README.md @@ -142,9 +142,10 @@ Building Sourcetrail requires several dependencies to be in place on your machin ### Required dependencies -* __LLVM/Clang 9.0.0__ +* __LLVM/Clang 10.0.0__ * __Reason__: Used for running the preprocessor on the indexedes source code, building and traversing an Abstract Syntax Tree and generating error messages. - * __Building for Windows__: Follow [these steps](https://clang.llvm.org/get_started.html) to build the project. Make sure to check out the correct tag and to run the cmake command exactly as described. + * __Building__: Make sure to check out the correct tag: `git checkout llvmorg-10.0.0` + * __Building for Windows__: Follow [these steps](https://clang.llvm.org/get_started.html) to build the project. Run the cmake command exactly as described. * __Building for Unix__: Follow this [installation guide](http://clang.llvm.org/docs/LibASTMatchersTutorial.html) to build the project. Make sure to build with `-DLLVM_ENABLE_RTTI=ON`. ### Building diff --git a/deployment/dockerfiles/linux/centos7_64/Dockerfile b/deployment/dockerfiles/linux/centos7_64/Dockerfile index 7d4e0a8f..bd73b965 100755 --- a/deployment/dockerfiles/linux/centos7_64/Dockerfile +++ b/deployment/dockerfiles/linux/centos7_64/Dockerfile @@ -55,7 +55,7 @@ make -j8 && \ make -j8 install && rm -Rf /qt # LLVM/Clang -ARG LLVM_VERSION=9.0.0 +ARG LLVM_VERSION=10.0.0 RUN mkdir -p /llvm && cd /llvm && \ wget http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz && \ tar xvf llvm-${LLVM_VERSION}.src.tar.xz && \ diff --git a/deployment/dockerfiles/linux/travis_ci/Dockerfile b/deployment/dockerfiles/linux/travis_ci/Dockerfile index 201dc9e0..0f1d3a4b 100644 --- a/deployment/dockerfiles/linux/travis_ci/Dockerfile +++ b/deployment/dockerfiles/linux/travis_ci/Dockerfile @@ -1,4 +1,4 @@ -FROM coatisoftware/centos7_64_qt_llvm:qt5126-llvm900 +FROM coatisoftware/centos7_64_qt_llvm:qt5126-llvm1000 # TODO: remove after full image rebuilt ------------------------------------ USER root diff --git a/src/lib_cxx/data/parser/cxx/ASTAction.cpp b/src/lib_cxx/data/parser/cxx/ASTAction.cpp index 0ece149a..59238573 100644 --- a/src/lib_cxx/data/parser/cxx/ASTAction.cpp +++ b/src/lib_cxx/data/parser/cxx/ASTAction.cpp @@ -30,7 +30,7 @@ std::unique_ptr ASTAction::CreateASTConsumer( bool ASTAction::BeginSourceFileAction(clang::CompilerInstance& compiler) { clang::Preprocessor& preprocessor = compiler.getPreprocessor(); - preprocessor.addPPCallbacks(llvm::make_unique( + preprocessor.addPPCallbacks(std::make_unique( compiler.getSourceManager(), m_client, m_canonicalFilePathCache)); preprocessor.addCommentHandler(&m_commentHandler); return true; diff --git a/src/lib_cxx/data/parser/cxx/CanonicalFilePathCache.cpp b/src/lib_cxx/data/parser/cxx/CanonicalFilePathCache.cpp index 6148dda8..22aeedff 100644 --- a/src/lib_cxx/data/parser/cxx/CanonicalFilePathCache.cpp +++ b/src/lib_cxx/data/parser/cxx/CanonicalFilePathCache.cpp @@ -1,7 +1,7 @@ #include "CanonicalFilePathCache.h" #include - +#include #include "utilityClang.h" #include "utilityString.h" diff --git a/src/lib_cxx/data/parser/cxx/ClangInvocationInfo.cpp b/src/lib_cxx/data/parser/cxx/ClangInvocationInfo.cpp index d92eb91e..6a0f059e 100644 --- a/src/lib_cxx/data/parser/cxx/ClangInvocationInfo.cpp +++ b/src/lib_cxx/data/parser/cxx/ClangInvocationInfo.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "CxxCompilationDatabaseSingle.h" #include "CxxDiagnosticConsumer.h" @@ -44,8 +45,8 @@ ClangInvocationInfo ClangInvocationInfo::getClangInvocationString( const char* const BinaryName = Argv[0]; clang::IntrusiveRefCntPtr DiagOpts = new clang::DiagnosticOptions(); unsigned MissingArgIndex, MissingArgCount; - std::unique_ptr Opts = clang::driver::createDriverOptTable(); - llvm::opt::InputArgList ParsedArgs = Opts->ParseArgs( + llvm::opt::OptTable Opts = clang::driver::getDriverOptTable(); + llvm::opt::InputArgList ParsedArgs = Opts.ParseArgs( clang::ArrayRef(Argv).slice(1), MissingArgIndex, MissingArgCount); clang::ParseDiagnosticArgs(*DiagOpts, ParsedArgs); diff --git a/src/lib_cxx/data/parser/cxx/CxxDiagnosticConsumer.cpp b/src/lib_cxx/data/parser/cxx/CxxDiagnosticConsumer.cpp index e0f05157..f924767e 100644 --- a/src/lib_cxx/data/parser/cxx/CxxDiagnosticConsumer.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxDiagnosticConsumer.cpp @@ -53,7 +53,7 @@ void CxxDiagnosticConsumer::HandleDiagnostic( { llvm::SmallString<100> messageStr; info.FormatDiagnostic(messageStr); - std::string message = messageStr.str(); + std::string message = messageStr.str().str(); if (message == "MS-style inline assembly is not available: Unable to find target for this triple (no " diff --git a/src/lib_cxx/data/parser/cxx/CxxParser.cpp b/src/lib_cxx/data/parser/cxx/CxxParser.cpp index 3d79d66d..67b55265 100644 --- a/src/lib_cxx/data/parser/cxx/CxxParser.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxParser.cpp @@ -41,7 +41,7 @@ std::vector appendFilePath(const std::vector& args, ll // custom implementation of clang::runToolOnCodeWithArgs which also sets our custon DiagnosticConsumer bool runToolOnCodeWithArgs( clang::DiagnosticConsumer* DiagConsumer, - clang::FrontendAction* ToolAction, + std::unique_ptr ToolAction, const llvm::Twine& Code, const std::vector& Args, const llvm::Twine& FileName = "input.cc", @@ -62,7 +62,7 @@ bool runToolOnCodeWithArgs( new clang::FileManager(clang::FileSystemOptions(), OverlayFileSystem)); clang::tooling::ToolInvocation Invocation( - prependSyntaxOnlyToolArgs(appendFilePath(Args, FileNameRef)), ToolAction, Files.get()); + prependSyntaxOnlyToolArgs(appendFilePath(Args, FileNameRef)), std::move(ToolAction), Files.get()); llvm::SmallString<1024> CodeStorage; llvm::StringRef CodeRef = Code.toNullTerminatedStringRef(CodeStorage); @@ -155,13 +155,13 @@ void CxxParser::buildIndex( std::shared_ptr diagnostics = getDiagnostics( FilePath(), canonicalFilePathCache, false); - clang::ASTFrontendAction* action = new ASTAction( + std::unique_ptr action = std::make_unique( m_client, canonicalFilePathCache, m_indexerStateInfo); std::vector args = getCommandlineArgumentsEssential(compilerFlags); runToolOnCodeWithArgs( - diagnostics.get(), action, fileContent->getText(), args, utility::encodeToUtf8(fileName)); + diagnostics.get(), std::move(action), fileContent->getText(), args, utility::encodeToUtf8(fileName)); } void CxxParser::runTool( diff --git a/src/lib_cxx/data/parser/cxx/CxxVerboseAstVisitor.h b/src/lib_cxx/data/parser/cxx/CxxVerboseAstVisitor.h index d3b068c1..8186a844 100644 --- a/src/lib_cxx/data/parser/cxx/CxxVerboseAstVisitor.h +++ b/src/lib_cxx/data/parser/cxx/CxxVerboseAstVisitor.h @@ -38,11 +38,12 @@ private: #define TYPE(Class, Base) \ case clang::TypeLoc::Class: \ return STRINGIFY(Class); -#include +#include case clang::TypeLoc::TypeLocClass::Qualified: return "Qualified"; + default: + return ""; } - return ""; } FilePath m_currentFilePath; diff --git a/src/lib_cxx/data/parser/cxx/GeneratePCHAction.cpp b/src/lib_cxx/data/parser/cxx/GeneratePCHAction.cpp index dd4e963c..64f7c40f 100644 --- a/src/lib_cxx/data/parser/cxx/GeneratePCHAction.cpp +++ b/src/lib_cxx/data/parser/cxx/GeneratePCHAction.cpp @@ -48,15 +48,15 @@ std::unique_ptr GeneratePCHAction::CreateASTConsumer( FrontendOpts.IncludeTimestamps, +CI.getLangOpts().CacheGeneratedPCH)); Consumers.push_back(CI.getPCHContainerWriter().CreatePCHContainerGenerator( - CI, InFile, OutputFile, std::move(OS), Buffer)); + CI, InFile.str(), OutputFile, std::move(OS), Buffer)); - return llvm::make_unique(std::move(Consumers)); + return std::make_unique(std::move(Consumers)); } bool GeneratePCHAction::BeginSourceFileAction(clang::CompilerInstance& compiler) { clang::Preprocessor& preprocessor = compiler.getPreprocessor(); - preprocessor.addPPCallbacks(llvm::make_unique( + preprocessor.addPPCallbacks(std::make_unique( compiler.getSourceManager(), m_client, m_canonicalFilePathCache)); return true; } diff --git a/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.cpp b/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.cpp index 1d57233f..c4ba6809 100644 --- a/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.cpp +++ b/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.cpp @@ -5,7 +5,7 @@ SingleFrontendActionFactory::SingleFrontendActionFactory(clang::FrontendAction* { } -clang::FrontendAction* SingleFrontendActionFactory::create() +std::unique_ptr SingleFrontendActionFactory::create() { - return m_action; + return std::unique_ptr(m_action); } diff --git a/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.h b/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.h index 7f229007..600390b5 100644 --- a/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.h +++ b/src/lib_cxx/data/parser/cxx/SingleFrontendActionFactory.h @@ -7,7 +7,7 @@ class SingleFrontendActionFactory: public clang::tooling::FrontendActionFactory { public: SingleFrontendActionFactory(clang::FrontendAction* action); - clang::FrontendAction* create() override; + std::unique_ptr create() override; private: clang::FrontendAction* m_action; diff --git a/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp b/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp index 7603731e..6ca07345 100644 --- a/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp +++ b/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp @@ -29,7 +29,7 @@ std::unique_ptr CxxSpecifierNameResolver::getName( case clang::NestedNameSpecifier::Identifier: { std::unique_ptr name = std::make_unique( - utility::decodeFromUtf8(nestedNameSpecifier->getAsIdentifier()->getName())); + utility::decodeFromUtf8(nestedNameSpecifier->getAsIdentifier()->getName().str())); if (const clang::NestedNameSpecifier* prefix = nestedNameSpecifier->getPrefix()) { diff --git a/src/lib_cxx/data/parser/cxx/name_resolver/CxxTemplateParameterStringResolver.cpp b/src/lib_cxx/data/parser/cxx/name_resolver/CxxTemplateParameterStringResolver.cpp index 91b5b67b..ef6358df 100644 --- a/src/lib_cxx/data/parser/cxx/name_resolver/CxxTemplateParameterStringResolver.cpp +++ b/src/lib_cxx/data/parser/cxx/name_resolver/CxxTemplateParameterStringResolver.cpp @@ -46,7 +46,7 @@ std::wstring CxxTemplateParameterStringResolver::getTemplateParameterString( break; } - const std::wstring parameterName = utility::decodeFromUtf8(parameter->getName()); + const std::wstring parameterName = utility::decodeFromUtf8(parameter->getName().str()); if (!parameterName.empty()) { templateParameterTypeString += L' ' + parameterName; diff --git a/src/lib_cxx/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp b/src/lib_cxx/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp index 15c7630c..b6e45c1c 100644 --- a/src/lib_cxx/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp +++ b/src/lib_cxx/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp @@ -125,7 +125,7 @@ std::unique_ptr CxxTypeNameResolver::getName(const clang::Type* typ pp.Bool = true; // value "true": prints bool type as "bool" instead of "_Bool" return std::make_unique( - utility::decodeFromUtf8(type->getAs()->getName(pp)), + utility::decodeFromUtf8(type->getAs()->getName(pp).str()), std::vector()); } case clang::Type::TemplateSpecialization: @@ -285,7 +285,7 @@ std::unique_ptr CxxTypeNameResolver::getName(const clang::Type* typ clang::SmallString<64> Buf; llvm::raw_svector_ostream StrOS(Buf); clang::QualType::print(type, clang::Qualifiers(), StrOS, pp, clang::Twine()); - std::wstring nameString = utility::decodeFromUtf8(StrOS.str()); + std::wstring nameString = utility::decodeFromUtf8(StrOS.str().str()); return std::make_unique(std::move(nameString)); } diff --git a/src/lib_cxx/data/parser/cxx/utilityClang.cpp b/src/lib_cxx/data/parser/cxx/utilityClang.cpp index e8f5b6ec..28b260b7 100644 --- a/src/lib_cxx/data/parser/cxx/utilityClang.cpp +++ b/src/lib_cxx/data/parser/cxx/utilityClang.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "CanonicalFilePathCache.h" #include "FilePath.h" @@ -130,10 +131,10 @@ std::wstring utility::getFileNameOfFileEntry(const clang::FileEntry* entry) std::wstring fileName = L""; if (entry != nullptr && entry->isValid()) { - fileName = utility::decodeFromUtf8(entry->tryGetRealPathName()); + fileName = utility::decodeFromUtf8(entry->tryGetRealPathName().str()); if (fileName.empty()) { - fileName = utility::decodeFromUtf8(entry->getName()); + fileName = utility::decodeFromUtf8(entry->getName().str()); } else {