Hi, this patch adds effective target signal.
Atm, -DSIGNAL_SUPPRESS is defined at top-level in gcc_target_compile resulting in the macro being passed down to ~30k compilations. The macro is used in just 17 testcases.
The patch defines an effective target signal, which is used in: - individual test-cases to add -DSIGNAL_SUPPRESS using dg-additional-options - ieee.exp to add -DSIGNAL_SUPPRESS to additional_flags (because dg-additional-options is not supported there) Lightly tested sofar. OK for trunk if x86_64 and nvptx testing succeeds? Thanks, - Tom
Add effective target signal 2017-06-09 Tom de Vries <t...@codesourcery.com> * lib/target-supports.exp (check_effective_target_signal): New proc. * lib/gcc.exp (gcc_target_compile): Remove appending of -DSIGNAL_SUPPRESS to additional_flags. * gcc.c-torture/execute/ieee/ieee.exp: Add -DSIGNAL_SUPPRESS to additional_flags if effective target signal is not supported by the target. * gcc.c-torture/execute/20101011-1.c: Same. * gcc.dg/c99-stdint-1.c: Same. * gcc.dg/c99-stdint-2.c: Same. * gcc.dg/c99-stdint-5.c: Same. * gcc.dg/c99-stdint-6.c: Same. * gcc.dg/stdint-width-1.c: Same. * doc/sourcebuild.texi (Effective-Target Keywords, Environment attributes): Document signal effective target. --- gcc/doc/sourcebuild.texi | 3 +++ gcc/testsuite/gcc.c-torture/execute/20101011-1.c | 1 + gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp | 4 ++++ gcc/testsuite/gcc.dg/c99-stdint-1.c | 1 + gcc/testsuite/gcc.dg/c99-stdint-2.c | 2 ++ gcc/testsuite/gcc.dg/c99-stdint-5.c | 1 + gcc/testsuite/gcc.dg/c99-stdint-6.c | 1 + gcc/testsuite/gcc.dg/stdint-width-1.c | 1 + gcc/testsuite/lib/gcc.exp | 3 --- gcc/testsuite/lib/target-supports.exp | 9 +++++++++ 10 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 841e75a..c55b168 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1973,6 +1973,9 @@ time) should be run on this target. This can be enabled by setting the Test system runs executables on a simulator (i.e. slowly) rather than hardware (i.e. fast). +@item signal +Target has @code{signal.h}. + @item stabs Target supports the stabs debugging format. diff --git a/gcc/testsuite/gcc.c-torture/execute/20101011-1.c b/gcc/testsuite/gcc.c-torture/execute/20101011-1.c index 899a401..dda49a5 100644 --- a/gcc/testsuite/gcc.c-torture/execute/20101011-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/20101011-1.c @@ -1,5 +1,6 @@ /* { dg-options "-fnon-call-exceptions" } */ /* With -fnon-call-exceptions 0 / 0 should not be eliminated. */ +/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */ #ifdef SIGNAL_SUPPRESS # define DO_TEST 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp b/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp index 26247d6..043e02d 100644 --- a/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp @@ -53,6 +53,10 @@ if { [istarget "alpha*-*-*"] lappend additional_flags "-mieee" } +if { ![check_effective_target_signal] } { + lappend additional_flags "-DSIGNAL_SUPPRESS" +} + # load support procs load_lib c-torture.exp diff --git a/gcc/testsuite/gcc.dg/c99-stdint-1.c b/gcc/testsuite/gcc.dg/c99-stdint-1.c index 530d130..f5c2cda 100644 --- a/gcc/testsuite/gcc.dg/c99-stdint-1.c +++ b/gcc/testsuite/gcc.dg/c99-stdint-1.c @@ -10,6 +10,7 @@ /* { dg-do compile } */ /* { dg-options "-std=iso9899:1999 -pedantic-errors -fhosted" } */ /* { dg-require-effective-target ptr32plus } */ +/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */ #include <limits.h> #include <stdint.h> diff --git a/gcc/testsuite/gcc.dg/c99-stdint-2.c b/gcc/testsuite/gcc.dg/c99-stdint-2.c index 1784b0c..08d9f60 100644 --- a/gcc/testsuite/gcc.dg/c99-stdint-2.c +++ b/gcc/testsuite/gcc.dg/c99-stdint-2.c @@ -3,6 +3,8 @@ /* { dg-do compile } */ /* { dg-options "-std=iso9899:1999 -pedantic-errors -ffreestanding" } */ /* { dg-require-effective-target ptr32plus } */ +/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */ + /* The test is that there are no diagnostics, so just include the hosted version. */ #include "c99-stdint-1.c" diff --git a/gcc/testsuite/gcc.dg/c99-stdint-5.c b/gcc/testsuite/gcc.dg/c99-stdint-5.c index 9c224ed..6051323 100644 --- a/gcc/testsuite/gcc.dg/c99-stdint-5.c +++ b/gcc/testsuite/gcc.dg/c99-stdint-5.c @@ -3,6 +3,7 @@ compilations). */ /* { dg-do compile } */ /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ +/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */ #include <stdint.h> #ifndef SIGNAL_SUPPRESS diff --git a/gcc/testsuite/gcc.dg/c99-stdint-6.c b/gcc/testsuite/gcc.dg/c99-stdint-6.c index 150666c..60ac31f 100644 --- a/gcc/testsuite/gcc.dg/c99-stdint-6.c +++ b/gcc/testsuite/gcc.dg/c99-stdint-6.c @@ -2,6 +2,7 @@ with any system <inttypes.h> header. */ /* { dg-do compile { target inttypes_types } } */ /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ +/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */ #include <inttypes.h> #ifndef SIGNAL_SUPPRESS diff --git a/gcc/testsuite/gcc.dg/stdint-width-1.c b/gcc/testsuite/gcc.dg/stdint-width-1.c index a28feee..3eba9f6 100644 --- a/gcc/testsuite/gcc.dg/stdint-width-1.c +++ b/gcc/testsuite/gcc.dg/stdint-width-1.c @@ -1,6 +1,7 @@ /* Test TS 18661-1 width macros in <stdint.h>. */ /* { dg-do compile } */ /* { dg-options "-std=c11 -ffreestanding" } */ +/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */ #include <stddef.h> #define __STDC_WANT_IEC_60559_BFP_EXT__ diff --git a/gcc/testsuite/lib/gcc.exp b/gcc/testsuite/lib/gcc.exp index fd32a30..30fb083 100644 --- a/gcc/testsuite/lib/gcc.exp +++ b/gcc/testsuite/lib/gcc.exp @@ -144,9 +144,6 @@ proc gcc_target_compile { source dest type options } { if [target_info exists gcc,stack_size] { lappend options "additional_flags=-DSTACK_SIZE=[target_info gcc,stack_size]" } - if [target_info exists gcc,signal_suppress] { - lappend options "additional_flags=-DSIGNAL_SUPPRESS" - } # TEST_ALWAYS_FLAGS are flags that should be passed to every # compilation. They are passed first to allow individual diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index d0b35be..d3d5eb4 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -504,6 +504,15 @@ proc check_effective_target_trampolines { } { return 1 } +# Return 1 if signal.h is supported. + +proc check_effective_target_signal { } { + if [target_info exists gcc,signal_suppress] { + return 0 + } + return 1 +} + # Return 1 if according to target_info struct and explicit target list # target disables -fdelete-null-pointer-checks. Targets should return 0 # if they simply default to -fno-delete-null-pointer-checks but obey