+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.
@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;
+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
--- /dev/null
+/* { dg-do run } */
+/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ abort (); /* This results in a failure. */
+}
--- /dev/null
+/* { dg-do run } */
+/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ return 0; /* This results in a pass. */
+}
--- /dev/null
+/* { dg-do run } */
+/* { dg-xfail-run-if "" { *-*-* } { "*" } { "" } } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ abort (); /* This results in an expected failure. */
+}
--- /dev/null
+/* { dg-do run } */
+/* { dg-xfail-run-if "" { *-*-* } { "*" } { "" } } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ return 0; /* This results in unexpected pass. */
+}
--- /dev/null
+/* { dg-do run { xfail *-empty-* } } */
+/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ abort (); /* Neither xfail list matched, so fail. */
+}
--- /dev/null
+/* { dg-do run { xfail *-empty-* } } */
+/* { dg-xfail-run-if "" { empty-*-* } { "*" } { "" } } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ return 0; /* Neither xfail list matched, so pass. */
+}
--- /dev/null
+/* { 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. */
+}
--- /dev/null
+/* { 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. */
+}
# 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
/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.
}
}
+# 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