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
This commit is contained in:
Janis Johnson 2009-01-07 18:31:27 +00:00 committed by Janis Johnson
parent 301b6a4efe
commit 30af0edbf4
13 changed files with 132 additions and 19 deletions

View File

@ -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.

View File

@ -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. */
}

View File

@ -0,0 +1,9 @@
/* { dg-do run } */
/* { dg-options "-DDEFINED" } */
/* { dg-xfail-run-if "comment" { def_nocache } { "*" } { "" } } */
int
main ()
{
return 1;
}

View File

@ -0,0 +1,7 @@
/* { dg-options "-DDEFINED" } */
int
main ()
{
int
} /* { dg-error "expected" "" { target def_nocache } } */

View File

@ -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 } } } */

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-options "-DNOT_THE_RIGHT_DEFINE" } */
/* { dg-skip-if "comment" { def_nocache } { "*" } { "" } } */
int
main ()
{
return 0;
}

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-options "-DDEFINED" } */
/* { dg-skip-if "comment" { def_nocache } { "*" } { "" } } */
int
main ()
{
return 0;
}

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-options "-DNOT_THE_RIGHT_DEFINE" } */
/* { dg-xfail-if "comment" { def_nocache } { "*" } { "" } } */
int
main ()
{
return 0;
}

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-options "-DDEFINED" } */
/* { dg-xfail-if "comment" { def_nocache } { "*" } { "" } } */
int
main ()
{
return 0;
}

View File

@ -0,0 +1,6 @@
/* { dg-options "-Wall -DDEFINED" } */
int
foo ()
{
} /* { dg-warning "control" "" { target def_nocache } } */

View File

@ -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.

View File

@ -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

View File

@ -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
}