Commit 263108e1 by Janis Johnson Committed by Janis Johnson

sourcebuild.texi (Test Directives): Document dg-shouldfail.

gcc:

	* doc/sourcebuild.texi (Test Directives): Document dg-shouldfail.

gcc/testsuite:

	* lib/gcc-dg.exp (tool_load): Wrapper to support shouldfail tests.
	(dg-test): Support shouldfail tests.
	* lib/target-supports-dg.exp (dg-shouldfail): New.
	* gcc.test-framework/test-framework.awk: Handle shouldfail tests.
	* gcc.test-framework/dg-do-run-sf-exp-F.c: New test.
	* gcc.test-framework/dg-do-run-sf-exp-P.c: New test.
	* gcc.test-framework/dg-do-run-sft-exp-F.c: New test.
	* gcc.test-framework/dg-do-run-sft-exp-P.c: New test.
	* gcc.test-framework/dg-dox-run-sf-exp-XF.c: New test.
	* gcc.test-framework/dg-dox-run-sf-exp-XP.c: New test.

From-SVN: r115424
parent 43e6b77c
2006-07-13 Janis Johnson <janis187@us.ibm.com>
* doc/sourcebuild.texi (Test Directives): Document dg-shouldfail.
2006-07-13 Jan Hubicka <jh@suse.cz> 2006-07-13 Jan Hubicka <jh@suse.cz>
* cgraphunit.c (cgraph_varpool_analyze_pending_decls): Call * cgraphunit.c (cgraph_varpool_analyze_pending_decls): Call
......
...@@ -1004,6 +1004,10 @@ Skip the test if the test target, including current multilib flags, ...@@ -1004,6 +1004,10 @@ Skip the test if the test target, including current multilib flags,
is not covered by the effective-target keyword. is not covered by the effective-target keyword.
This directive must appear after any @code{dg-do} directive in the test. This directive must appear after any @code{dg-do} directive in the test.
@item @{ dg-shouldfail @var{comment} @{ @var{selector} @} @{ @var{include-opts} @} @{ @var{exclude-opts} @} @}
Expect the test executable to return a nonzero exit status if the
conditions (which are the same as for @code{dg-skip-if}) are met.
@item @{ dg-error @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @} @item @{ dg-error @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
This DejaGnu directive appears on a source line that is expected to get This DejaGnu directive appears on a source line that is expected to get
an error message, or else specifies the source line associated with the an error message, or else specifies the source line associated with the
......
2006-07-13 Janis Johnson <janis187@us.ibm.com>
* lib/gcc-dg.exp (tool_load): Wrapper to support shouldfail tests.
(dg-test): Support shouldfail tests.
* lib/target-supports-dg.exp (dg-shouldfail): New.
* gcc.test-framework/test-framework.awk: Handle shouldfail tests.
* gcc.test-framework/dg-do-run-sf-exp-F.c: New test.
* gcc.test-framework/dg-do-run-sf-exp-P.c: New test.
* gcc.test-framework/dg-do-run-sft-exp-F.c: New test.
* gcc.test-framework/dg-do-run-sft-exp-P.c: New test.
* gcc.test-framework/dg-dox-run-sf-exp-XF.c: New test.
* gcc.test-framework/dg-dox-run-sf-exp-XP.c: New test.
2006-07-13 Jan Hubicka <jh@suse.cz> 2006-07-13 Jan Hubicka <jh@suse.cz>
* gcc.target/i386/memcpy-1.c: New. * gcc.target/i386/memcpy-1.c: New.
/* { dg-do run } */
/* { dg-shouldfail "required comment" } */
int
main ()
{
return 0; /* We expect nonzero, so this fails. */
}
/* { dg-do run } */
/* { dg-shouldfail "required comment" } */
extern void abort (void);
int
main ()
{
abort (); /* We expect nonzero, so this passes. */
}
/* { dg-do run } */
/* { dg-shouldfail "comment" { unknown-*-* } { "*" } { "" } } */
extern void abort (void);
int
main ()
{
abort (); /* Directive is ignored so we expect zero; this fails. */
}
/* { dg-do run } */
/* { dg-shouldfail "comment" { *-*-* } { "*" } { "" } } */
extern void abort (void);
int
main ()
{
abort (); /* We expect nonzero exit, so this passes. */
}
/* { dg-do run { xfail *-*-* } } */
/* { dg-shouldfail "required comment" } */
int
main ()
{
return 0; /* We want nonzero but expect to fail; XFAIL. */
}
/* { dg-do run { xfail *-*-* } } */
/* { dg-shouldfail "required comment" } */
extern void abort (void);
int
main ()
{
abort (); /* We want nonzero, but expect to fail; XPASS. */
}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# of passing tests. # of passing tests.
# #
# #
# Copyright (c) 2004, 2005 Free Software Foundation, Inc. # Copyright (c) 2004, 2005, 2006 Free Software Foundation, Inc.
# #
# This file is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
...@@ -45,6 +45,8 @@ BEGIN { skip = 1; passes = 0; fails = 0; } ...@@ -45,6 +45,8 @@ BEGIN { skip = 1; passes = 0; fails = 0; }
/^PASS.*sa.*-1.c.*(test for excess errors)/ { ignore(); next } /^PASS.*sa.*-1.c.*(test for excess errors)/ { ignore(); next }
# The other dox tests pass the compile step; ignore that message. # The other dox tests pass the compile step; ignore that message.
/^PASS.*dox.*(test for excess errors)/ { ignore(); next } /^PASS.*dox.*(test for excess errors)/ { ignore(); next }
# The sf tests pass the compile step; ignore that message.
/^PASS.*sf.*(test for excess errors)/ { ignore(); next }
# Ignore lines that begin with comma. # Ignore lines that begin with comma.
/^,/ { ignore(); next } /^,/ { ignore(); next }
# For tests of dg-output, ignore successful compilation. # For tests of dg-output, ignore successful compilation.
......
...@@ -186,6 +186,28 @@ proc gcc-dg-prune { system text } { ...@@ -186,6 +186,28 @@ proc gcc-dg-prune { system text } {
return $text return $text
} }
# Replace ${tool}_load with a wrapper to provide for an expected nonzero
# exit status. Multiple languages include this file so this handles them
# all, not just gcc.
if { [info procs ${tool}_load] != [list] \
&& [info procs saved_${tool}_load] == [list] } {
rename ${tool}_load saved_${tool}_load
proc ${tool}_load { program args } {
global tool
global shouldfail
set result [saved_${tool}_load $program $args]
if { $shouldfail != 0 } {
switch [lindex $result 0] {
"pass" { set status "fail" }
"fail" { set status "pass" }
}
set result [list $status [lindex $result 1]]
}
return $result
}
}
# Utility routines. # Utility routines.
# #
...@@ -436,12 +458,14 @@ if { [info procs saved-dg-test] == [list] } { ...@@ -436,12 +458,14 @@ if { [info procs saved-dg-test] == [list] } {
global additional_prunes global additional_prunes
global errorInfo global errorInfo
global compiler_conditional_xfail_data global compiler_conditional_xfail_data
global shouldfail
if { [ catch { eval saved-dg-test $args } errmsg ] } { if { [ catch { eval saved-dg-test $args } errmsg ] } {
set saved_info $errorInfo set saved_info $errorInfo
set additional_files "" set additional_files ""
set additional_sources "" set additional_sources ""
set additional_prunes "" set additional_prunes ""
set shouldfail 0
if [info exists compiler_conditional_xfail_data] { if [info exists compiler_conditional_xfail_data] {
unset compiler_conditional_xfail_data unset compiler_conditional_xfail_data
} }
...@@ -450,6 +474,7 @@ if { [info procs saved-dg-test] == [list] } { ...@@ -450,6 +474,7 @@ if { [info procs saved-dg-test] == [list] } {
set additional_files "" set additional_files ""
set additional_sources "" set additional_sources ""
set additional_prunes "" set additional_prunes ""
set shouldfail 0
if [info exists compiler_conditional_xfail_data] { if [info exists compiler_conditional_xfail_data] {
unset compiler_conditional_xfail_data unset compiler_conditional_xfail_data
} }
......
...@@ -265,6 +265,37 @@ proc dg-xfail-if { args } { ...@@ -265,6 +265,37 @@ proc dg-xfail-if { args } {
} }
} }
# Record whether the program is expected to return a nonzero status.
set shouldfail 0
proc dg-shouldfail { 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
}
global shouldfail
set args [lreplace $args 0 0]
if { [llength $args] > 1 } {
set selector [list target [lindex $args 1]]
if { [dg-process-target $selector] == "S" } {
# The target matches, now check the flags. These variables
# 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] {
set shouldfail 1
}
}
} else {
set shouldfail 1
}
}
# Intercept the call to the DejaGnu version of dg-process-target to # Intercept the call to the DejaGnu version of dg-process-target to
# support use of an effective-target keyword in place of a list of # support use of an effective-target keyword in place of a list of
# target triplets to xfail or skip a test. # target triplets to xfail or skip a test.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment