aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanis Johnson <janis187@us.ibm.com>2009-01-07 18:31:27 +0000
committerJanis Johnson <janis@gcc.gnu.org>2009-01-07 18:31:27 +0000
commit30af0edbf4637051e029063027052b843dbe8aac (patch)
tree68da84c270d2e72e9b06d0c45ebab9e948251a37
parent301b6a4efe8b404c6e797ec71a74c1209cd446f1 (diff)
downloadgcc-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
-rw-r--r--gcc/testsuite/ChangeLog18
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-do-run-sft-nocache-exp-P.c11
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c9
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-error-nocache-exp-P.c7
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-nocache-scanasm-exp-XF.c14
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-P.c9
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-U.c9
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-P.c9
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-XP.c9
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c6
-rw-r--r--gcc/testsuite/gcc.test-framework/test-framework.awk2
-rw-r--r--gcc/testsuite/gcc.test-framework/test-framework.exp10
-rw-r--r--gcc/testsuite/lib/target-supports-dg.exp38
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
}