From: Janis Johnson Date: Wed, 21 May 2008 18:03:32 +0000 (+0000) Subject: sourcebuild.texi (Test Directives): Add dg-xfail-run-if. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=00a25a2d39c992235f57f6d891a407144236760c;p=gcc.git sourcebuild.texi (Test Directives): Add dg-xfail-run-if. gcc/ * doc/sourcebuild.texi (Test Directives): Add dg-xfail-run-if. gcc/testsuite/ * lib/target-supports-dg.exp (dg-xfail-run-if): New. * gcc.test-framework/dg-do-run-xrif-exp-F.c: New test. * gcc.test-framework/dg-do-run-xrif-exp-P.c: New test. * gcc.test-framework/dg-do-run-xrif-exp-XF.c: New test. * gcc.test-framework/dg-do-run-xrif-exp-XP.c: New test. * gcc.test-framework/dg-dot-run-xrif-exp-F.c: New test. * gcc.test-framework/dg-dot-run-xrif-exp-P.c: New test. * gcc.test-framework/dg-dot-run-xrif-exp-XF.c: New test. * gcc.test-framework/dg-dot-run-xrif-exp-XP.c: New test. * gcc.test-framework/test-framework.awk: Handle new tests. From-SVN: r135729 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 661505bdf71..125cc454538 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2008-05-21 Janis Johnson + + * doc/sourcebuild.texi (Test Directives): Add dg-xfail-run-if. + 2008-05-21 H.J. Lu * config/i386/sse.md (vec_extractv4sf): Removed. diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 6c551aa8156..635c716769a 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1004,7 +1004,11 @@ an empty @var{exclude-opts} list. @item @{ dg-xfail-if @var{comment} @{ @var{selector} @} @{ @var{include-opts} @} @{ @var{exclude-opts} @} @} Expect the test to fail if the conditions (which are the same as for -@code{dg-skip-if}) are met. +@code{dg-skip-if}) are met. This does not affect the execute step. + +@item @{ dg-xfail-run-if @var{comment} @{ @var{selector} @} @{ @var{include-opts} @} @{ @var{exclude-opts} @} @} +Expect the execute step of a test to fail if the conditions (which are +the same as for @code{dg-skip-if}) and @code{dg-xfail-if}) are met. @item @{ dg-require-@var{support} args @} Skip the test if the target does not provide the required support; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e2e4323a99a..5600a4099a7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2008-05-21 Janis Johnson + + * lib/target-supports-dg.exp (dg-xfail-run-if): New. + * gcc.test-framework/dg-do-run-xrif-exp-F.c: New test. + * gcc.test-framework/dg-do-run-xrif-exp-P.c: New test. + * gcc.test-framework/dg-do-run-xrif-exp-XF.c: New test. + * gcc.test-framework/dg-do-run-xrif-exp-XP.c: New test. + * gcc.test-framework/dg-dot-run-xrif-exp-F.c: New test. + * gcc.test-framework/dg-dot-run-xrif-exp-P.c: New test. + * gcc.test-framework/dg-dot-run-xrif-exp-XF.c: New test. + * gcc.test-framework/dg-dot-run-xrif-exp-XP.c: New test. + * gcc.test-framework/test-framework.awk: Handle new tests. + 2008-05-21 Francois-Xavier Coudert PR fortran/36257 diff --git a/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-F.c b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-F.c new file mode 100644 index 00000000000..01459eaa08c --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-F.c @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + abort (); /* This results in a failure. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-P.c new file mode 100644 index 00000000000..d3472abcc3c --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-P.c @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + return 0; /* This results in a pass. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XF.c b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XF.c new file mode 100644 index 00000000000..0a0a1f856c3 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XF.c @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-xfail-run-if "" { *-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + abort (); /* This results in an expected failure. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XP.c b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XP.c new file mode 100644 index 00000000000..6f418689a13 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XP.c @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-xfail-run-if "" { *-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + return 0; /* This results in unexpected pass. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-F.c b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-F.c new file mode 100644 index 00000000000..3011799c88c --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-F.c @@ -0,0 +1,10 @@ +/* { dg-do run { xfail *-empty-* } } */ +/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + abort (); /* Neither xfail list matched, so fail. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-P.c new file mode 100644 index 00000000000..5bb92207a19 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-P.c @@ -0,0 +1,10 @@ +/* { dg-do run { xfail *-empty-* } } */ +/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + return 0; /* Neither xfail list matched, so pass. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XF.c b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XF.c new file mode 100644 index 00000000000..854f1cb20de --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XF.c @@ -0,0 +1,10 @@ +/* { dg-do run { xfail *-*-* } } */ +/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + abort (); /* A failed match doesn't override an existing XFAIL. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XP.c b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XP.c new file mode 100644 index 00000000000..f1ac0c1de9f --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XP.c @@ -0,0 +1,10 @@ +/* { dg-do run { xfail empty-*-* } } */ +/* { dg-xfail-run-if "" { *-*-* } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + return 0; /* First xfail list didn't match but second did, so XPASS. */ +} diff --git a/gcc/testsuite/gcc.test-framework/test-framework.awk b/gcc/testsuite/gcc.test-framework/test-framework.awk index 9df6874f159..381d3473b05 100644 --- a/gcc/testsuite/gcc.test-framework/test-framework.awk +++ b/gcc/testsuite/gcc.test-framework/test-framework.awk @@ -3,7 +3,7 @@ # of passing tests. # # -# Copyright (c) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# Copyright (c) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -47,6 +47,8 @@ BEGIN { skip = 1; passes = 0; fails = 0; } /dg-outexists.*\(test for excess errors)/ { ignore(); next } /dg-outexists.*\(test for warnings/ { ignore(); next } /dg-outexists.*\(test for errors/ { ignore(); next } +# ignore compile step for dg-xfail-run-if tests. +/run-xrif.*\(test for excess errors)/ { ignore(); next } # The other dox tests pass the compile step; ignore that message. /^PASS.*dox.*\(test for excess errors\)/ { ignore(); next } # The sf tests pass the compile step; ignore that message. diff --git a/gcc/testsuite/lib/target-supports-dg.exp b/gcc/testsuite/lib/target-supports-dg.exp index c4731c15917..4bff5fa4424 100644 --- a/gcc/testsuite/lib/target-supports-dg.exp +++ b/gcc/testsuite/lib/target-supports-dg.exp @@ -294,6 +294,30 @@ proc dg-xfail-if { args } { } } +# Like dg-xfail-if but for the execute step. + +proc dg-xfail-run-if { args } { + # Don't bother if we're already skipping the test. + upvar dg-do-what dg-do-what + if { [lindex ${dg-do-what} 1] == "N" } { + return + } + + set args [lreplace $args 0 0] + + set selector [list target [lindex $args 1]] + if { [dg-process-target $selector] == "S" } { + # These are defined in DejaGnu's dg-test, needed by check-flags. + upvar dg-extra-tool-flags dg-extra-tool-flags + upvar tool_flags tool_flags + + if [check-flags $args] { + upvar dg-do-what dg-do-what + set dg-do-what [list [lindex ${dg-do-what} 0] "S" "F"] + } + } +} + # Record whether the program is expected to return a nonzero status. set shouldfail 0