From: Christophe Lyon Date: Thu, 6 Jul 2017 08:12:33 +0000 (+0000) Subject: [testsuite] Add dg-require-stack-check X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9e00a39737cd6f8b30ce4bde36c6da11c415ef93;p=gcc.git [testsuite] Add dg-require-stack-check 2017-07-06 Christophe Lyon gcc/ * doc/sourcebuild.texi (Test Directives, Variants of dg-require-support): Add documentation for dg-require-stack-check. gcc/testsuite/ * lib/target-supports-dg.exp (dg-require-stack-check): New. * lib/target-supports.exp (check_stack_check_available): New. * g++.dg/other/i386-9.C: Add dg-require-stack-check. * gcc.c-torture/compile/stack-check-1.c: Likewise. * gcc.dg/graphite/run-id-pr47653.c: Likewise. * gcc.dg/pr47443.c: Likewise. * gcc.dg/pr48134.c: Likewise. * gcc.dg/pr70017.c: Likewise. * gcc.target/aarch64/stack-checking.c: Likewise. * gcc.target/arm/stack-checking.c: Likewise. * gcc.target/i386/pr48723.c: Likewise. * gcc.target/i386/pr55672.c: Likewise. * gcc.target/i386/pr67265-2.c: Likewise. * gcc.target/i386/pr67265.c: Likewise. * gnat.dg/opt49.adb: Likewise. * gnat.dg/stack_check1.adb: Likewise. * gnat.dg/stack_check2.adb: Likewise. * gnat.dg/stack_check3.adb: Likewise. From-SVN: r250013 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c66d2f4ad0..2acf140f407 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-07-06 Christophe Lyon + + * doc/sourcebuild.texi (Test Directives, Variants of + dg-require-support): Add documentation for dg-require-stack-check. + 2017-07-05 Sebastian Peryt * config/i386/subst.md (mask_scalar, round_scalar, diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 4136a68a615..85af8778167 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2311,6 +2311,11 @@ the codeset to convert to. Skip the test if the target does not support profiling with option @var{profopt}. +@item dg-require-stack-check @var{check} +Skip the test if the target does not support the @code{-fstack-check} +option. If @var{check} is @code{""}, support for @code{-fstack-check} +is checked, for @code{-fstack-check=("@var{check}")} otherwise. + @item dg-require-visibility @var{vis} Skip the test if the target does not support the @code{visibility} attribute. If @var{vis} is @code{""}, support for @code{visibility("hidden")} is diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4be9f0ca074..d629c2bd90d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,24 @@ +2017-07-06 Christophe Lyon + + * lib/target-supports-dg.exp (dg-require-stack-check): New. + * lib/target-supports.exp (check_stack_check_available): New. + * g++.dg/other/i386-9.C: Add dg-require-stack-check. + * gcc.c-torture/compile/stack-check-1.c: Likewise. + * gcc.dg/graphite/run-id-pr47653.c: Likewise. + * gcc.dg/pr47443.c: Likewise. + * gcc.dg/pr48134.c: Likewise. + * gcc.dg/pr70017.c: Likewise. + * gcc.target/aarch64/stack-checking.c: Likewise. + * gcc.target/arm/stack-checking.c: Likewise. + * gcc.target/i386/pr48723.c: Likewise. + * gcc.target/i386/pr55672.c: Likewise. + * gcc.target/i386/pr67265-2.c: Likewise. + * gcc.target/i386/pr67265.c: Likewise. + * gnat.dg/opt49.adb: Likewise. + * gnat.dg/stack_check1.adb: Likewise. + * gnat.dg/stack_check2.adb: Likewise. + * gnat.dg/stack_check3.adb: Likewise. + 2017-07-05 Kelvin Nilsen PR target/80103 diff --git a/gcc/testsuite/g++.dg/other/i386-9.C b/gcc/testsuite/g++.dg/other/i386-9.C index 79640579142..782cf875eef 100644 --- a/gcc/testsuite/g++.dg/other/i386-9.C +++ b/gcc/testsuite/g++.dg/other/i386-9.C @@ -2,6 +2,7 @@ // Testcase by Zdenek Sojka // { dg-do run { target i?86-*-* x86_64-*-* } } +/* { dg-require-stack-check "" } */ // { dg-options "-Os -mpreferred-stack-boundary=5 -fstack-check -fno-omit-frame-pointer" } int main() diff --git a/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c b/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c index 5c99688b35a..2a03f7c29ae 100644 --- a/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c @@ -1,3 +1,4 @@ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-stack-check "" } */ /* { dg-additional-options "-fstack-check" } */ #include "20031023-1.c" diff --git a/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c b/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c index cd9d8ebcb16..ca91af471ca 100644 --- a/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c +++ b/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c @@ -1,3 +1,4 @@ +/* { dg-require-stack-check "generic" } */ /* { dg-options "-O -fstack-check=generic -ftree-pre -fgraphite-identity" } */ /* nvptx doesn't expose a stack. */ /* { dg-skip-if "" { nvptx-*-* } } */ diff --git a/gcc/testsuite/gcc.dg/pr47443.c b/gcc/testsuite/gcc.dg/pr47443.c index 47abea27dd7..5a5c43f2537 100644 --- a/gcc/testsuite/gcc.dg/pr47443.c +++ b/gcc/testsuite/gcc.dg/pr47443.c @@ -1,5 +1,6 @@ /* PR tree-optimization/47443 */ /* { dg-do compile } */ +/* { dg-require-stack-check "generic" } */ /* { dg-options "-O -fstack-check=generic" } */ static inline int bar (char *c, int i) diff --git a/gcc/testsuite/gcc.dg/pr48134.c b/gcc/testsuite/gcc.dg/pr48134.c index 8dc5a6d0d41..446ad01b452 100644 --- a/gcc/testsuite/gcc.dg/pr48134.c +++ b/gcc/testsuite/gcc.dg/pr48134.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-stack-check "specific" } */ /* { dg-options "-O2 -fstack-check=specific -fno-tree-dse -fno-tree-fre -fno-tree-loop-optimize -g" } */ struct S diff --git a/gcc/testsuite/gcc.dg/pr70017.c b/gcc/testsuite/gcc.dg/pr70017.c index f544167612b..3489d5baf48 100644 --- a/gcc/testsuite/gcc.dg/pr70017.c +++ b/gcc/testsuite/gcc.dg/pr70017.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-stack-check "generic" } */ /* { dg-options "-fstack-check=generic" } */ /* Check that the expected warning is issued for large frames. */ diff --git a/gcc/testsuite/gcc.target/aarch64/stack-checking.c b/gcc/testsuite/gcc.target/aarch64/stack-checking.c index 1d1530df62b..eaa40581c86 100644 --- a/gcc/testsuite/gcc.target/aarch64/stack-checking.c +++ b/gcc/testsuite/gcc.target/aarch64/stack-checking.c @@ -1,4 +1,5 @@ /* { dg-do run { target { *-*-linux* } } } */ +/* { dg-require-stack-check "" } */ /* { dg-options "-fstack-check" } */ int main(void) diff --git a/gcc/testsuite/gcc.target/arm/stack-checking.c b/gcc/testsuite/gcc.target/arm/stack-checking.c index 88a7e6e8286..4b53bedd97b 100644 --- a/gcc/testsuite/gcc.target/arm/stack-checking.c +++ b/gcc/testsuite/gcc.target/arm/stack-checking.c @@ -1,6 +1,6 @@ /* { dg-do run { target { *-*-linux* } } } */ +/* { dg-require-stack-check "" } */ /* { dg-options "-fstack-check" } */ -/* { dg-skip-if "" { arm_thumb1 } } */ int main(void) { diff --git a/gcc/testsuite/gcc.target/i386/pr48723.c b/gcc/testsuite/gcc.target/i386/pr48723.c index ad102090e9f..222c075fbf7 100644 --- a/gcc/testsuite/gcc.target/i386/pr48723.c +++ b/gcc/testsuite/gcc.target/i386/pr48723.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-stack-check "" } */ /* { dg-options "-fstack-check -mavx" } */ struct S0 diff --git a/gcc/testsuite/gcc.target/i386/pr55672.c b/gcc/testsuite/gcc.target/i386/pr55672.c index 6f1c898c748..f7b0d717e01 100644 --- a/gcc/testsuite/gcc.target/i386/pr55672.c +++ b/gcc/testsuite/gcc.target/i386/pr55672.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-stack-check "generic" } */ /* { dg-options "-O -fstack-check=generic" } */ int main () diff --git a/gcc/testsuite/gcc.target/i386/pr67265-2.c b/gcc/testsuite/gcc.target/i386/pr67265-2.c index a9f2eb460ef..690a7845557 100644 --- a/gcc/testsuite/gcc.target/i386/pr67265-2.c +++ b/gcc/testsuite/gcc.target/i386/pr67265-2.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-stack-check "" } */ /* { dg-options "-O -fstack-check" } */ void foo (int n) diff --git a/gcc/testsuite/gcc.target/i386/pr67265.c b/gcc/testsuite/gcc.target/i386/pr67265.c index 7827685fe5f..2671acc043a 100644 --- a/gcc/testsuite/gcc.target/i386/pr67265.c +++ b/gcc/testsuite/gcc.target/i386/pr67265.c @@ -2,6 +2,7 @@ /* Reduced testcase by Johannes Dewender */ /* { dg-do compile } */ +/* { dg-require-stack-check "" } */ /* { dg-options "-O -fstack-check -fPIC" } */ int a, b, c, d, e; diff --git a/gcc/testsuite/gnat.dg/opt49.adb b/gcc/testsuite/gnat.dg/opt49.adb index 4b91973a19d..42ab953a2e0 100644 --- a/gcc/testsuite/gnat.dg/opt49.adb +++ b/gcc/testsuite/gnat.dg/opt49.adb @@ -1,4 +1,5 @@ -- { dg-do run } +-- { dg-require-stack-check "" } -- { dg-options "-O -fstack-check" } procedure Opt49 is diff --git a/gcc/testsuite/gnat.dg/stack_check1.adb b/gcc/testsuite/gnat.dg/stack_check1.adb index 51ee1a633b3..eaad745bdf6 100644 --- a/gcc/testsuite/gnat.dg/stack_check1.adb +++ b/gcc/testsuite/gnat.dg/stack_check1.adb @@ -1,4 +1,5 @@ -- { dg-do run } +-- { dg-require-stack-check "" } -- { dg-options "-fstack-check" } -- This test requires architecture- and OS-specific support code for unwinding diff --git a/gcc/testsuite/gnat.dg/stack_check2.adb b/gcc/testsuite/gnat.dg/stack_check2.adb index 4a3008ba02b..f34d647c862 100644 --- a/gcc/testsuite/gnat.dg/stack_check2.adb +++ b/gcc/testsuite/gnat.dg/stack_check2.adb @@ -1,4 +1,5 @@ -- { dg-do run } +-- { dg-require-stack-check "" } -- { dg-options "-fstack-check" } -- This test requires architecture- and OS-specific support code for unwinding diff --git a/gcc/testsuite/gnat.dg/stack_check3.adb b/gcc/testsuite/gnat.dg/stack_check3.adb index 734ed422733..3bb859c82f8 100644 --- a/gcc/testsuite/gnat.dg/stack_check3.adb +++ b/gcc/testsuite/gnat.dg/stack_check3.adb @@ -1,4 +1,5 @@ -- { dg-do compile } +-- { dg-require-stack-check "" } -- { dg-options "-O -fstack-check" } package body Stack_Check3 is diff --git a/gcc/testsuite/lib/target-supports-dg.exp b/gcc/testsuite/lib/target-supports-dg.exp index 6400d643409..d50d8b07ada 100644 --- a/gcc/testsuite/lib/target-supports-dg.exp +++ b/gcc/testsuite/lib/target-supports-dg.exp @@ -265,6 +265,21 @@ proc dg-require-linker-plugin { args } { } } +# If this target does not support the "stack-check" option, skip this +# test. + +proc dg-require-stack-check { args } { + set stack_check_available [ check_stack_check_available [lindex $args 1 ] ] + if { $stack_check_available == -1 } { + upvar name name + unresolved "$name" + } + if { $stack_check_available != 1 } { + upvar dg-do-what dg-do-what + set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] + } +} + # Add any target-specific flags needed for accessing the given list # of features. This must come after all dg-options. diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index fe5e7775640..d19892e88d5 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1063,6 +1063,17 @@ proc check_effective_target_fstack_protector {} { } "-fstack-protector"] } +# Return 1 if the target supports -fstack-check or -fstack-check=$stack_kind +proc check_stack_check_available { stack_kind } { + if [string match "" $stack_kind] then { + set stack_opt "-fstack-check" + } else { set stack_opt "-fstack-check=$stack_kind" } + + return [check_no_compiler_messages stack_check executable { + int main (void) { return 0; } + } "$stack_opt"] +} + # Return 1 if compilation with -freorder-blocks-and-partition is error-free # for trivial code, 0 otherwise. As some targets (ARM for example) only # warn when -fprofile-use is also supplied we test that combination too.