Consider the test-case gcc.c-torture/compile/pr42717.c, which has:
...
/* { dg-xfail-if "ptxas crashes" { nvptx-*-* } { "-O0" } { "" } } */
...
When running make check-gcc, I get:
...
XPASS: gcc.c-torture/compile/pr42717.c -O0 (test for excess errors)
...
but when forcing to run only that test-case using
RUNTESTFLAGS=compile.exp=pr42717.c I get instead:
...
PASS: gcc.c-torture/compile/pr42717.c -O0 (test for excess errors)
...
Using RUNTESTFLAGS="-v -v -v" we can see what happens:
...
check_cached_effective_target exceptions_enabled: \
returning 1 for nvptx-none-run
Limited to targets: *-*-*
Will search for options "-O0"
Will exclude for options ""
Compiler flags are: exceptions_enabled9848.cc -fdiagnostics-plain-output \
--sysroot=/home/vries/nvptx/trunk/install/nvptx-none -S -isystem \
/home/vries/nvptx/trunk/build-gcc/nvptx-none/./newlib/targ-include \
-isystem /home/vries/nvptx/trunk/source-gcc/newlib/libc/include \
-o exceptions_enabled9848.s
Checking "*-*-*" against "nvptx-unknown-none"
Looking for -O0 to include in the compiler flags
Looking for to exclude in the compiler flags
This is not a conditional match
PASS: gcc.c-torture/compile/pr42717.c -O0 (test for excess errors)
...
The effective target exceptions_enabled is tested from gcc-dg-prune, but
the calculation overwrites $compiler_flags, which is subsequently tested for
-O0.
Fix this by saving and restoring $compiler_flags when calling
${tool}_target_compile in check_compile.
Tested on nvptx.
gcc/testsuite/ChangeLog:
2020-10-14 Tom de Vries <tdevries@suse.de>
* lib/target-supports.exp (check_compile): Save and restore
$compiler_flags when calling ${tool}_target_compile.
set f [open $src "w"]
puts $f $contents
close $f
+ global compiler_flags
+ set save_compiler_flags $compiler_flags
set lines [${tool}_target_compile $src $output $compile_type "$options"]
+ set compiler_flags $save_compiler_flags
file delete $src
set scan_output $output