From 6606b852bfa866c19375a7c5e9cb94776a28bd94 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 4 Feb 2021 08:16:17 -0800 Subject: [PATCH] driver: error for nonexistent linker inputs [PR 98943] We used to check all unknown input files, even when passing them to a compiler. But that caused problems. However, not erroring out on non-existent would-be-linker inputs confuses configure machinery that probes the compiler to see if it accepts various inputs. This restores the access check for things that are thought to be linker input files, when we're not linking. (If we are linking, we presume the linker will error out on its own accord.) PR driver/98943 gcc/ * gcc.c (driver::maybe_run_linker): Check for input file accessibility if not linking. gcc/testsuite/ * c-c++-common/pr98943.c: New. --- gcc/gcc.c | 11 +++++++++-- gcc/testsuite/c-c++-common/pr98943.c | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/pr98943.c diff --git a/gcc/gcc.c b/gcc/gcc.c index 76f1d422f9a..7837553958b 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -9020,8 +9020,15 @@ driver::maybe_run_linker (const char *argv0) const for (i = 0; (int) i < n_infiles; i++) if (explicit_link_files[i] && !(infiles[i].language && infiles[i].language[0] == '*')) - warning (0, "%s: linker input file unused because linking not done", - outfiles[i]); + { + warning (0, "%s: linker input file unused because linking not done", + outfiles[i]); + if (access (outfiles[i], F_OK) < 0) + /* This is can be an indication the user specifed an errorneous + separated option value, (or used the wrong prefix for an + option). */ + error ("%s: linker input file not found: %m", outfiles[i]); + } } /* The end of "main". */ diff --git a/gcc/testsuite/c-c++-common/pr98943.c b/gcc/testsuite/c-c++-common/pr98943.c new file mode 100644 index 00000000000..53d8838f242 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr98943.c @@ -0,0 +1,10 @@ +// { dg-do compile } +// PR 98943, compiler feature tests can get confused by not linking +// { dg-options "NOTAFILE" } + +int main () +{ + return 0; +} + +// { dg-regexp {[^\n:]*: warning: NOTAFILE: linker input file unused because linking not done\n[^\n:]*: error: NOTAFILE: linker input file not found: [^\n]*\n} } -- 2.30.2