[Clang] Fix Hurd toolchain test on a two-stage build with ThinLTO
authorAlexandre Ganea <alexandre.ganea@ubisoft.com>
Mon, 2 Mar 2020 20:41:47 +0000 (15:41 -0500)
committerAlexandre Ganea <alexandre.ganea@ubisoft.com>
Mon, 2 Mar 2020 20:42:33 +0000 (15:42 -0500)
commit7e77cf473ac9d8f8b65db017d660892f1c8f4b75
tree7d68c41d3867d91007e2f5e01b02ebd3d858f77b
parentc4a9d976c139f4dc7241809aa965fbc5355314fc
[Clang] Fix Hurd toolchain test on a two-stage build with ThinLTO

A two-stage ThinLTO build previously failed the clang/test/Driver/hurd.c test because of a static_cast in "tools::gnutools::Linker::ConstructJob()" which wrongly converted an instance of "clang::driver::toolchains::Hurd" into that of "clang::driver::toolchains::Linux". ThinLTO would 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)

Fixes PR45061.

Differential Revision: https://reviews.llvm.org/D75373
clang/lib/Driver/ToolChains/Gnu.cpp
clang/lib/Driver/ToolChains/Gnu.h
clang/lib/Driver/ToolChains/Hurd.cpp
clang/lib/Driver/ToolChains/Hurd.h
clang/lib/Driver/ToolChains/Linux.cpp
clang/lib/Driver/ToolChains/Linux.h