diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 1806c14c395dcb..9ca674511dabab 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -38,6 +38,9 @@ using tools::addMultilibFlag; using tools::addPathIfExists; static bool forwardToGCC(const Option &O) { + // LinkerInput options have been forwarded. Don't duplicate. + if (O.hasFlag(options::LinkerInput)) + return false; return O.matches(options::OPT_Link_Group) || O.hasFlag(options::LinkOption); } diff --git a/clang/test/Driver/gcc_forward.c b/clang/test/Driver/gcc_forward.c index 9579d0d60d1cff..a99944f8f53364 100644 --- a/clang/test/Driver/gcc_forward.c +++ b/clang/test/Driver/gcc_forward.c @@ -1,7 +1,7 @@ // RUN: %clang -### %s -target aarch64-none-elf \ -// RUN: --coverage -fuse-ld=lld --ld-path=ld -nostdlib -r -rdynamic -static -static-pie \ +// RUN: --coverage -e _start -fuse-ld=lld --ld-path=ld -nostdlib -r -rdynamic -static -static-pie \ // RUN: 2>&1 | FileCheck --check-prefix=FORWARD %s -// FORWARD: gcc{{[^"]*}}" "--coverage" "-fuse-ld=lld" "--ld-path=ld" "-nostdlib" "-r" "-rdynamic" "-static" "-static-pie" +// FORWARD: gcc{{[^"]*}}" "--coverage" "-fuse-ld=lld" "--ld-path=ld" "-nostdlib" "-rdynamic" "-static" "-static-pie" "-o" "a.out" "{{.*}}.o" "-e" "_start" "-r" // Check that we don't try to forward -Xclang or -mlinker-version to GCC. // PR12920 -- Check also we may not forward W_Group options to GCC.