diff options
author | Janis Johnson <janis187@us.ibm.com> | 2009-01-07 18:31:27 +0000 |
---|---|---|
committer | Janis Johnson <janis@gcc.gnu.org> | 2009-01-07 18:31:27 +0000 |
commit | 30af0edbf4637051e029063027052b843dbe8aac (patch) | |
tree | 68da84c270d2e72e9b06d0c45ebab9e948251a37 | |
parent | 301b6a4efe8b404c6e797ec71a74c1209cd446f1 (diff) | |
download | gcc-30af0edbf4637051e029063027052b843dbe8aac.zip gcc-30af0edbf4637051e029063027052b843dbe8aac.tar.gz gcc-30af0edbf4637051e029063027052b843dbe8aac.tar.bz2 |
target-supports-dg.exp (current_compiler_flags): New.
* lib/target-supports-dg.exp (current_compiler_flags): New.
(check-flags): Use it; do not access dg-test local variables.
(dg-skip-if): Do not access dg-test local variables.
(dg-xfail-run-if): Ditto.
(dg-shouldfail): Ditto.
* gcc.test-framework/test-framework.exp
(check_effective_target_def_nocache): New.
* gcc.test-framework/test-framework.awk: Handle scan tests.
* gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c: New test.
* gcc.test-framework/dg-error-nocache-exp-P.c: New test.
* gcc.test-framework/dg-nocache-scanasm-exp-XF.c: New test.
* gcc.test-framework/dg-warning-nocache-exp-P.c: New test.
* gcc.test-framework/dg-nocache-sif-exp-P.c: New test.
* gcc.test-framework/dg-nocache-sif-exp-U.c: New test.
* gcc.test-framework/dg-nocache-xif-exp-P.c: New test.
* gcc.test-framework/dg-do-run-sft-nocache-exp-P.c: New test.
* gcc.test-framework/dg-nocache-xif-exp-XP.c: New test.
From-SVN: r143165
13 files changed, 132 insertions, 19 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bdf4d88..c3e22fc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,23 @@ 2009-01-07 Janis Johnson <janis187@us.ibm.com> + * lib/target-supports-dg.exp (current_compiler_flags): New. + (check-flags): Use it; do not access dg-test local variables. + (dg-skip-if): Do not access dg-test local variables. + (dg-xfail-run-if): Ditto. + (dg-shouldfail): Ditto. + * gcc.test-framework/test-framework.exp + (check_effective_target_def_nocache): New. + * gcc.test-framework/test-framework.awk: Handle scan tests. + * gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c: New test. + * gcc.test-framework/dg-error-nocache-exp-P.c: New test. + * gcc.test-framework/dg-nocache-scanasm-exp-XF.c: New test. + * gcc.test-framework/dg-warning-nocache-exp-P.c: New test. + * gcc.test-framework/dg-nocache-sif-exp-P.c: New test. + * gcc.test-framework/dg-nocache-sif-exp-U.c: New test. + * gcc.test-framework/dg-nocache-xif-exp-P.c: New test. + * gcc.test-framework/dg-do-run-sft-nocache-exp-P.c: New test. + * gcc.test-framework/dg-nocache-xif-exp-XP.c: New test. + * g++.dg/torture/pr38586.C: Ignore a possible warning. * lib/target-supports-dg.exp (check_test_flags): Delete. diff --git a/gcc/testsuite/gcc.test-framework/dg-do-run-sft-nocache-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-do-run-sft-nocache-exp-P.c new file mode 100644 index 0000000..4ef0e7a --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-do-run-sft-nocache-exp-P.c @@ -0,0 +1,11 @@ +/* { dg-do run } */ +/* { dg-options "-DDEFINED" } */ +/* { dg-shouldfail "comment" { def_nocache } { "*" } { "" } } */ + +extern void abort (void); + +int +main () +{ + abort (); /* We expect nonzero exit, so this passes. */ +} diff --git a/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c new file mode 100644 index 0000000..dfa1792 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c @@ -0,0 +1,9 @@ +/* { dg-do run } */ +/* { dg-options "-DDEFINED" } */ +/* { dg-xfail-run-if "comment" { def_nocache } { "*" } { "" } } */ + +int +main () +{ + return 1; +} diff --git a/gcc/testsuite/gcc.test-framework/dg-error-nocache-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-error-nocache-exp-P.c new file mode 100644 index 0000000..abec81a --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-error-nocache-exp-P.c @@ -0,0 +1,7 @@ +/* { dg-options "-DDEFINED" } */ + +int +main () +{ + int +} /* { dg-error "expected" "" { target def_nocache } } */ diff --git a/gcc/testsuite/gcc.test-framework/dg-nocache-scanasm-exp-XF.c b/gcc/testsuite/gcc.test-framework/dg-nocache-scanasm-exp-XF.c new file mode 100644 index 0000000..183fbd0 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-nocache-scanasm-exp-XF.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-DDEFINED" } */ + +int +foo () +{ + return 0; +} + +/* A few examples from scanasm.exp. */ + +/* { dg-final { scan-assembler "whatever" { xfail def_nocache } } } */ +/* { dg-final { scan-assembler-not "foo" { xfail def_nocache } } } */ +/* { dg-final { scan-hidden "whatever" { xfail def_nocache } } } */ diff --git a/gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-P.c new file mode 100644 index 0000000..99392e3 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-P.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-DNOT_THE_RIGHT_DEFINE" } */ +/* { dg-skip-if "comment" { def_nocache } { "*" } { "" } } */ + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-U.c b/gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-U.c new file mode 100644 index 0000000..ffaf49f --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-U.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-DDEFINED" } */ +/* { dg-skip-if "comment" { def_nocache } { "*" } { "" } } */ + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-P.c new file mode 100644 index 0000000..21e8336 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-P.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-DNOT_THE_RIGHT_DEFINE" } */ +/* { dg-xfail-if "comment" { def_nocache } { "*" } { "" } } */ + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-XP.c b/gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-XP.c new file mode 100644 index 0000000..07a55ef --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-XP.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-DDEFINED" } */ +/* { dg-xfail-if "comment" { def_nocache } { "*" } { "" } } */ + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c new file mode 100644 index 0000000..9e0ee27 --- /dev/null +++ b/gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c @@ -0,0 +1,6 @@ +/* { dg-options "-Wall -DDEFINED" } */ + +int +foo () +{ +} /* { dg-warning "control" "" { target def_nocache } } */ diff --git a/gcc/testsuite/gcc.test-framework/test-framework.awk b/gcc/testsuite/gcc.test-framework/test-framework.awk index 381d347..02537e8 100644 --- a/gcc/testsuite/gcc.test-framework/test-framework.awk +++ b/gcc/testsuite/gcc.test-framework/test-framework.awk @@ -53,6 +53,8 @@ BEGIN { skip = 1; passes = 0; fails = 0; } /^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 passing compile step for scan tests. +/^PASS.*scan.*\(test for excess errors\)/ { ignore(); next } # Ignore lines that begin with comma. /^,/ { ignore(); next } # For tests of dg-output, ignore successful compilation. diff --git a/gcc/testsuite/gcc.test-framework/test-framework.exp b/gcc/testsuite/gcc.test-framework/test-framework.exp index 7cbc9db..722e09f 100644 --- a/gcc/testsuite/gcc.test-framework/test-framework.exp +++ b/gcc/testsuite/gcc.test-framework/test-framework.exp @@ -42,6 +42,16 @@ proc check_effective_target_no { args } { return 0 } +proc check_effective_target_def_nocache { } { + return [check_no_compiler_messages_nocache def_nocache object { + #ifdef DEFINED + int dummy; + #else + #error DEFINED is not defined + #endif + } [current_compiler_flags]] +} + global dg-do-what-default set save-dg-do-what-default ${dg-do-what-default} set dg-do-what-default compile diff --git a/gcc/testsuite/lib/target-supports-dg.exp b/gcc/testsuite/lib/target-supports-dg.exp index 655af3e..321daac 100644 --- a/gcc/testsuite/lib/target-supports-dg.exp +++ b/gcc/testsuite/lib/target-supports-dg.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007 +# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -15,6 +15,22 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. +# DejaGnu's dg-test defines extra flags that are used to compile a test. +# Access them for directives that need to examine all options that are +# used for a test, including checks for non-cached effective targets. +# We don't know how far up the call chain it is but we know we'll hit +# it eventually, and that we're at least 3 calls down. + +proc current_compiler_flags { } { + set frames 2 + while { ![info exists flags1] } { + set frames [expr $frames + 1] + upvar $frames dg-extra-tool-flags flags1 + } + upvar $frames tool_flags flags2 + return "$flags1 $flags2" +} + # If this target does not support weak symbols, skip this test. proc dg-require-weak { args } { @@ -189,9 +205,6 @@ proc dg-add-options { args } { proc check-flags { args } { global compiler_flags global TOOL_OPTIONS - # These variables are from DejaGnu's dg-test. - upvar dg-extra-tool-flags extra_tool_flags - upvar tool_flags tool_flags # The args are within another list; pull them out. set args [lindex $args 0] @@ -199,8 +212,7 @@ proc check-flags { args } { # Start the list with a dummy tool name so the list will match "*" # if there are no flags. set compiler_flags " toolname " - append compiler_flags $extra_tool_flags - append compiler_flags $tool_flags + append compiler_flags [current_compiler_flags] # If running a subset of the test suite, $TOOL_OPTIONS may not exist. catch {append compiler_flags " $TOOL_OPTIONS "} set dest [target_info name] @@ -239,10 +251,6 @@ proc dg-skip-if { args } { 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] "N" "P"] @@ -280,10 +288,6 @@ proc dg-xfail-run-if { args } { 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"] @@ -308,11 +312,7 @@ proc dg-shouldfail { args } { 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 - + # The target matches, now check the flags. if [check-flags $args] { set shouldfail 1 } |