From 30af0edbf4637051e029063027052b843dbe8aac Mon Sep 17 00:00:00 2001 From: Janis Johnson Date: Wed, 7 Jan 2009 18:31:27 +0000 Subject: [PATCH] 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 --- gcc/testsuite/ChangeLog | 18 +++++++++ .../dg-do-run-sft-nocache-exp-P.c | 11 ++++++ .../dg-do-run-xrif-nocache-exp-XF.c | 9 +++++ .../dg-error-nocache-exp-P.c | 7 ++++ .../dg-nocache-scanasm-exp-XF.c | 14 +++++++ .../gcc.test-framework/dg-nocache-sif-exp-P.c | 9 +++++ .../gcc.test-framework/dg-nocache-sif-exp-U.c | 9 +++++ .../gcc.test-framework/dg-nocache-xif-exp-P.c | 9 +++++ .../dg-nocache-xif-exp-XP.c | 9 +++++ .../dg-warning-nocache-exp-P.c | 6 +++ .../gcc.test-framework/test-framework.awk | 2 + .../gcc.test-framework/test-framework.exp | 10 +++++ gcc/testsuite/lib/target-supports-dg.exp | 38 +++++++++---------- 13 files changed, 132 insertions(+), 19 deletions(-) create mode 100644 gcc/testsuite/gcc.test-framework/dg-do-run-sft-nocache-exp-P.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-do-run-xrif-nocache-exp-XF.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-error-nocache-exp-P.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-nocache-scanasm-exp-XF.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-P.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-nocache-sif-exp-U.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-P.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-nocache-xif-exp-XP.c create mode 100644 gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bdf4d88f5b5..c3e22fc7a9e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,23 @@ 2009-01-07 Janis Johnson + * 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 00000000000..4ef0e7a99a5 --- /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 00000000000..dfa1792a8b5 --- /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 00000000000..abec81ad5f0 --- /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 00000000000..183fbd051bd --- /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 00000000000..99392e34133 --- /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 00000000000..ffaf49fdf66 --- /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 00000000000..21e833681dc --- /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 00000000000..07a55ef9189 --- /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 00000000000..9e0ee279886 --- /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 381d3473b05..02537e8efb0 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 7cbc9dbe0c0..722e09f78b6 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 655af3e834c..321daac3239 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 # . +# 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 }