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.
This commit is contained in:
Nathan Sidwell 2021-02-04 08:16:17 -08:00
parent 63538886d1
commit 6606b852bf
2 changed files with 19 additions and 2 deletions

View File

@ -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". */

View File

@ -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} }