From f347a4553ff071eb13306ede0ead3e9fc676e7ed Mon Sep 17 00:00:00 2001 From: janis Date: Thu, 2 Dec 2004 00:05:15 +0000 Subject: [PATCH] * lib/gcc-dg.exp (dg-process-target): Wrapper for dg function to handle effective-target-keyword. (dg-skip-if): Support effective-target keyword as target list. (dg-xfail-if): Ditto. * lib/target-supports.exp (is-effective-target-keyword): New proc. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91592 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 8 +++++ gcc/testsuite/lib/gcc-dg.exp | 64 ++++++++++++++++++++++++++++++++--- gcc/testsuite/lib/target-supports.exp | 16 +++++++++ 3 files changed, 84 insertions(+), 4 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce903c62d2b..5a5d84a7f15 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2004-12-01 Janis Johnson + + * lib/gcc-dg.exp (dg-process-target): Wrapper for dg function to + handle effective-target-keyword. + (dg-skip-if): Support effective-target keyword as target list. + (dg-xfail-if): Ditto. + * lib/target-supports.exp (is-effective-target-keyword): New proc. + 2004-12-01 Diego Novillo PR tree-optimization/18291 diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index 92de9f75c54..a0162d2f0b0 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -429,9 +429,16 @@ proc dg-require-effective-target { args } { proc dg-skip-if { args } { set args [lreplace $args 0 0] - if [check_conditional_xfail $args] { - upvar dg-do-what dg-do-what - skip_test_and_clear_xfail + + # The target list might be an effective-target keyword, so replace + # the original list with "*-*-*" if it is matched. + set selector "target [join [lindex $args 1]]" + if { [dg-process-target $selector] == "S" } { + # The target list matched; now check the flags. + if [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]] { + upvar dg-do-what dg-do-what + skip_test_and_clear_xfail + } } } @@ -460,7 +467,7 @@ proc dg-xfail-if { args } { set selector "target [join [lindex $args 1]]" if { [dg-process-target $selector] == "S" } { global compiler_conditional_xfail_data - set compiler_conditional_xfail_data $args + set compiler_conditional_xfail_data [lreplace $args 1 1 "*-*-*"] } } @@ -493,4 +500,53 @@ if { [info procs saved-dg-test] == [list] } { set additional_prunes "" } } + +# 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 +# target triplets to xfail or skip a test. +# +# selector is one of: +# xfail target-triplet-1 ... +# xfail effective-target-keyword +# target target-triplet-1 ... +# target effective-target-keyword +# +# For a target list the result is "S" if the target is selected, "N" otherwise. +# For an xfail list the result is "F" if the target is affected, "P" otherwise. + +if { [info procs saved-dg-process-target] == [list] } { + rename dg-process-target saved-dg-process-target + + proc dg-process-target { args } { + verbose "replacement dg-process-target" 2 + + # Extract the 'what' keyword from the argument list. + set selector [string trim [lindex $args 0]] + if [regexp "^xfail " $selector] { + set what "xfail" + } elseif [regexp "^target " $selector] { + set what "target" + } else { + error "syntax error in target selector \"$selector\"" + } + + # Extract the rest of the list, which might be a keyword. + regsub "^${what}" $selector "" rest + set rest [string trim $rest] + + if [is-effective-target-keyword $rest] { + # The selector is an effective target keyword. + if [is-effective-target $rest] { + return [expr { $what == "xfail" ? "F" : "S" }] + } else { + return [expr { $what == "xfail" ? "P" : "N" }] + } + } + + # The selector is not an effective-target keyword, so process + # the list of target triplets. + return [saved-dg-process-target $selector] + } +} + set additional_prunes "" diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 0e122e0e6e0..2e1bde64748 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -538,3 +538,19 @@ proc is-effective-target { arg } { verbose "is-effective-target: $arg $selected" 2 return $selected } + +# Return 1 if the argument is an effective-target keyword, 0 otherwise. + +proc is-effective-target-keyword { arg } { + if { [info procs check_effective_target_${arg}] != [list] } { + return 1 + } else { + # These have different names for their check_* procs. + switch $arg { + "vmx_hw" { return 1 } + "named_sections" { return 1 } + "gc_sections" { return 1 } + default { return 0 } + } + } +} -- 2.11.0