njames93 created this revision. njames93 added reviewers: sammccall, Bigcheese. Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman. Herald added a project: clang. njames93 requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov.
This should address the FIXME about clang3.9 dervied to base unique_ptr constructor not working. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D91925 Files: clang-tools-extra/clangd/ConfigProvider.cpp Index: clang-tools-extra/clangd/ConfigProvider.cpp =================================================================== --- clang-tools-extra/clangd/ConfigProvider.cpp +++ clang-tools-extra/clangd/ConfigProvider.cpp @@ -206,8 +206,8 @@ std::unique_ptr<Provider> Provider::combine(std::vector<const Provider *> Providers) { - struct CombinedProvider : Provider { - std::vector<const Provider *> Providers; + class CombinedProvider : public Provider { + const std::vector<const Provider *> Providers; std::vector<CompiledFragment> getFragments(const Params &P, DiagnosticCallback DC) const override { @@ -218,14 +218,13 @@ } return Result; } + + public: + CombinedProvider(std::vector<const Provider *> Providers) + : Providers(std::move(Providers)) {} }; - auto Result = std::make_unique<CombinedProvider>(); - Result->Providers = std::move(Providers); - // FIXME: This is a workaround for a bug in older versions of clang (< 3.9) - // The constructor that is supposed to allow for Derived to Base - // conversion does not work. Remove this if we drop support for such - // configurations. - return std::unique_ptr<Provider>(Result.release()); + + return std::make_unique<CombinedProvider>(std::move(Providers)); } Config Provider::getConfig(const Params &P, DiagnosticCallback DC) const {
Index: clang-tools-extra/clangd/ConfigProvider.cpp =================================================================== --- clang-tools-extra/clangd/ConfigProvider.cpp +++ clang-tools-extra/clangd/ConfigProvider.cpp @@ -206,8 +206,8 @@ std::unique_ptr<Provider> Provider::combine(std::vector<const Provider *> Providers) { - struct CombinedProvider : Provider { - std::vector<const Provider *> Providers; + class CombinedProvider : public Provider { + const std::vector<const Provider *> Providers; std::vector<CompiledFragment> getFragments(const Params &P, DiagnosticCallback DC) const override { @@ -218,14 +218,13 @@ } return Result; } + + public: + CombinedProvider(std::vector<const Provider *> Providers) + : Providers(std::move(Providers)) {} }; - auto Result = std::make_unique<CombinedProvider>(); - Result->Providers = std::move(Providers); - // FIXME: This is a workaround for a bug in older versions of clang (< 3.9) - // The constructor that is supposed to allow for Derived to Base - // conversion does not work. Remove this if we drop support for such - // configurations. - return std::unique_ptr<Provider>(Result.release()); + + return std::make_unique<CombinedProvider>(std::move(Providers)); } Config Provider::getConfig(const Params &P, DiagnosticCallback DC) const {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits