aganea created this revision. aganea added reviewers: hans, sthibaul, kristina. Herald added subscribers: cfe-commits, dexonsmith, Prazek. Herald added a project: clang. aganea added a comment.
@hans, do you think this could be included in 10.0? As noted in PR45061, a two-stage ThinLTO build fails the `clang/test/Driver/hurd.c` test because of a `static_cast` here <https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/Gnu.cpp#L350> which wrongly converts an instance of `clang::driver::toolchains::Hurd` into that of `clang::driver::toolchains::Linux`. ThinLTO will later devirtualize the `ToolChain.getDynamicLinker(Args);` call and use `Linux::getDynamicLinker()` instead, causing the test to generate a wrong `-dynamic-linker` linker flag (`/lib/ld-linux.so.2` instead of `/lib/ld.so`) This patch simply fixes the `Hurd` class hierarchy as (I think) it was intended to be. Ideally, and because of the `static_cast` mentioned above, maybe `gnutools::Linker` should take a `const Linux &` instance, not a `const ToolChain &`. But that causes other issues and could be done later. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D75373 Files: clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Hurd.h Index: clang/lib/Driver/ToolChains/Hurd.h =================================================================== --- clang/lib/Driver/ToolChains/Hurd.h +++ clang/lib/Driver/ToolChains/Hurd.h @@ -10,13 +10,14 @@ #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H #include "Gnu.h" +#include "Linux.h" #include "clang/Driver/ToolChain.h" namespace clang { namespace driver { namespace toolchains { -class LLVM_LIBRARY_VISIBILITY Hurd : public Generic_ELF { +class LLVM_LIBRARY_VISIBILITY Hurd : public Linux { public: Hurd(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args); @@ -27,9 +28,9 @@ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - virtual std::string computeSysRoot() const; + std::string computeSysRoot() const override; - virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const; + std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override; std::vector<std::string> ExtraOpts; Index: clang/lib/Driver/ToolChains/Hurd.cpp =================================================================== --- clang/lib/Driver/ToolChains/Hurd.cpp +++ clang/lib/Driver/ToolChains/Hurd.cpp @@ -63,7 +63,7 @@ Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) - : Generic_ELF(D, Triple, Args) { + : Linux(D, Triple, Args) { std::string SysRoot = computeSysRoot(); path_list &Paths = getFilePaths();
Index: clang/lib/Driver/ToolChains/Hurd.h =================================================================== --- clang/lib/Driver/ToolChains/Hurd.h +++ clang/lib/Driver/ToolChains/Hurd.h @@ -10,13 +10,14 @@ #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H #include "Gnu.h" +#include "Linux.h" #include "clang/Driver/ToolChain.h" namespace clang { namespace driver { namespace toolchains { -class LLVM_LIBRARY_VISIBILITY Hurd : public Generic_ELF { +class LLVM_LIBRARY_VISIBILITY Hurd : public Linux { public: Hurd(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args); @@ -27,9 +28,9 @@ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - virtual std::string computeSysRoot() const; + std::string computeSysRoot() const override; - virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const; + std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override; std::vector<std::string> ExtraOpts; Index: clang/lib/Driver/ToolChains/Hurd.cpp =================================================================== --- clang/lib/Driver/ToolChains/Hurd.cpp +++ clang/lib/Driver/ToolChains/Hurd.cpp @@ -63,7 +63,7 @@ Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) - : Generic_ELF(D, Triple, Args) { + : Linux(D, Triple, Args) { std::string SysRoot = computeSysRoot(); path_list &Paths = getFilePaths();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits