sourcebuild.texi (Test Directives): Add dg-xfail-run-if.
authorJanis Johnson <janis187@us.ibm.com>
Wed, 21 May 2008 18:03:32 +0000 (18:03 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Wed, 21 May 2008 18:03:32 +0000 (18:03 +0000)
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

13 files changed:
gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-F.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-P.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XF.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-do-run-xrif-exp-XP.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-F.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-P.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XF.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/dg-dot-run-xrif-exp-XP.c [new file with mode: 0644]
gcc/testsuite/gcc.test-framework/test-framework.awk
gcc/testsuite/lib/target-supports-dg.exp

index 661505bdf716f00a65e298fb6c6a754f0aa0f537..125cc45453854f5cd04e8d1d915c6e12b7e47ff5 100644 (file)
@@ -1,3 +1,7 @@
+2008-05-21  Janis Johnson  <janis187@us.ibm.com>
+
+       * doc/sourcebuild.texi (Test Directives): Add dg-xfail-run-if.
+
 2008-05-21  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/i386/sse.md (vec_extractv4sf): Removed.
index 6c551aa8156217a3adeab93b3c5c38fe63a5aacb..635c716769a0e88202168f7c64c6da886c2c8c9a 100644 (file)
@@ -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;
index e2e4323a99a8567e383c18682b2b5b7f677086c1..5600a4099a752e156dfa38b876df95f78c0233b9 100644 (file)
@@ -1,3 +1,16 @@
+2008-05-21  Janis Johnson  <janis187@us.ibm.com>
+
+       * 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  <fxcoudert@gcc.gnu.org>
 
        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 (file)
index 0000000..01459ea
--- /dev/null
@@ -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 (file)
index 0000000..d3472ab
--- /dev/null
@@ -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 (file)
index 0000000..0a0a1f8
--- /dev/null
@@ -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 (file)
index 0000000..6f41868
--- /dev/null
@@ -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 (file)
index 0000000..3011799
--- /dev/null
@@ -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 (file)
index 0000000..5bb9220
--- /dev/null
@@ -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 (file)
index 0000000..854f1cb
--- /dev/null
@@ -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 (file)
index 0000000..f1ac0c1
--- /dev/null
@@ -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.  */
+}
index 9df6874f159aca979c5e7fd3df81760fc67e57dc..381d3473b0516122f5f7ff9196ed1f918f6a0b37 100644 (file)
@@ -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.
index c4731c15917f60780da03f9868231085b6234fb9..4bff5fa44244e0beeb26fabdfddf9f30c18ec12e 100644 (file)
@@ -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