Index: gcc/gcc/testsuite/lib/target-supports-dg.exp |
diff --git a/gcc/gcc/testsuite/lib/target-supports-dg.exp b/gcc/gcc/testsuite/lib/target-supports-dg.exp |
index ac88a7f255730ecb2e9b231fd4488f23eaf3b491..e742d750c762d5823a6a3237996f7325cc7965b9 100644 |
--- a/gcc/gcc/testsuite/lib/target-supports-dg.exp |
+++ b/gcc/gcc/testsuite/lib/target-supports-dg.exp |
@@ -1,4 +1,4 @@ |
-# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009 |
+# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 2010 |
# Free Software Foundation, Inc. |
# This program is free software; you can redistribute it and/or modify |
@@ -145,12 +145,23 @@ proc dg-require-named-sections { args } { |
} |
# If the target does not match the required effective target, skip this test. |
+# Only apply this if the optional selector matches. |
proc dg-require-effective-target { args } { |
set args [lreplace $args 0 0] |
- if { [llength $args] != 1 } { |
- error "syntax error, need a single effective-target keyword" |
+ # Verify the number of arguments. The last is optional. |
+ if { [llength $args] < 1 || [llength $args] > 2 } { |
+ error "syntax error, need a single effective-target keyword with optional selector" |
+ } |
+ |
+ # Evaluate selector if present. |
+ if { [llength $args] == 2 } { |
+ switch [dg-process-target [lindex $args 1]] { |
+ "S" { } |
+ "N" { return } |
+ } |
} |
+ |
if { ![is-effective-target [lindex $args 0]] } { |
upvar dg-do-what dg-do-what |
set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] |
@@ -235,9 +246,26 @@ proc check-flags { args } { |
append compiler_flags "[board_info $dest multilib_flags] " |
} |
- # The target list might be an effective-target keyword, so replace |
- # the original list with "*-*-*", since we already know it matches. |
- set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]] |
+ # The next two arguments are optional. If they were not specified, |
+ # use the defaults. |
+ if { [llength $args] == 2 } { |
+ lappend $args [list "*"] |
+ } |
+ if { [llength $args] == 3 } { |
+ lappend $args [list ""] |
+ } |
+ |
+ # If the option strings are the defaults, or the same as the |
+ # defaults, there is no need to call check_conditional_xfail to |
+ # compare them to the actual options. |
+ if { [string compare [lindex $args 2] "*"] == 0 |
+ && [string compare [lindex $args 3] "" ] == 0 } { |
+ set result 1 |
+ } else { |
+ # The target list might be an effective-target keyword, so replace |
+ # the original list with "*-*-*", since we already know it matches. |
+ set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]] |
+ } |
# Any value in this variable was left over from an earlier test. |
set compiler_flags "" |
@@ -256,14 +284,18 @@ proc check-flags { args } { |
# group of tests or flags specified with a previous dg-options command. |
proc dg-skip-if { args } { |
+ # Verify the number of arguments. The last two are optional. |
+ set args [lreplace $args 0 0] |
+ if { [llength $args] < 2 || [llength $args] > 4 } { |
+ error "dg-skip-if 2: need 2, 3, or 4 arguments" |
+ } |
+ |
# 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" } { |
if [check-flags $args] { |
@@ -276,31 +308,53 @@ proc dg-skip-if { args } { |
# Like check_conditional_xfail, but callable from a dg test. |
proc dg-xfail-if { args } { |
+ # Verify the number of arguments. The last three are optional. |
+ set args [lreplace $args 0 0] |
+ if { [llength $args] < 2 || [llength $args] > 4 } { |
+ error "dg-xfail-if: need 2, 3, or 4 arguments" |
+ } |
+ |
# Don't change anything 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" } { |
global compiler_conditional_xfail_data |
- set compiler_conditional_xfail_data [lreplace $args 1 1 "*-*-*"] |
+ |
+ # The target list might be an effective-target keyword. Replace |
+ # the original list with "*-*-*", since we already know it matches. |
+ set args [lreplace $args 1 1 "*-*-*"] |
+ |
+ # Supply default values for unspecified optional arguments. |
+ if { [llength $args] == 2 } { |
+ lappend $args [list "*"] |
+ } |
+ if { [llength $args] == 3 } { |
+ lappend $args [list ""] |
+ } |
+ |
+ set compiler_conditional_xfail_data $args |
} |
} |
# Like dg-xfail-if but for the execute step. |
proc dg-xfail-run-if { args } { |
+ # Verify the number of arguments. The last two are optional. |
+ set args [lreplace $args 0 0] |
+ if { [llength $args] < 2 || [llength $args] > 4 } { |
+ error "dg-xfail-run-if: need 2, 3, or 4 arguments" |
+ } |
+ |
# 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" } { |
if [check-flags $args] { |