From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28044 invoked by alias); 30 Jan 2007 20:36:04 -0000 Received: (qmail 27989 invoked by uid 48); 30 Jan 2007 20:35:50 -0000 Date: Tue, 30 Jan 2007 20:36:00 -0000 Message-ID: <20070130203550.27988.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug testsuite/25241] DejaGNU does not distinguish between errors and warnings In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "manu at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-01/txt/msg02661.txt.bz2 ------- Comment #4 from manu at gcc dot gnu dot org 2007-01-30 20:35 ------- I have the following patch. Framework tests work. However, this patch will make a lot of tests to fail because: * Many tests are using the wrong dg-warning or dg-error directive. * Many tests add an explicit "warning:" or "error:" to workaround this bug. * Many tests match several warning/error messages with a single dg-warning/dg-error directive. So what we want to do? Fix the testcases or do nothing? Index: gcc/testsuite/gcc.test-framework/dg-error-exp-F.c =================================================================== --- gcc/testsuite/gcc.test-framework/dg-error-exp-F.c (revision 0) +++ gcc/testsuite/gcc.test-framework/dg-error-exp-F.c (revision 0) @@ -0,0 +1,11 @@ +/* Test the tester; previously part of gcc.misc-tests/dg-9.c. */ +/* { dg-prms-id 42 } */ +/* { dg-options "-Wall" } */ + +f () +{ /* { dg-error "return type" "warning test" } */ +} /* { dg-error "control reaches end" "warning test" } */ + +main (int argc, char *argv[]) +{ /* { dg-error "return type" "warning test" } */ +} /* { dg-error "control reaches end" "warning test" } */ Index: gcc/testsuite/gcc.test-framework/dg-warning-exp-F.c =================================================================== --- gcc/testsuite/gcc.test-framework/dg-warning-exp-F.c (revision 0) +++ gcc/testsuite/gcc.test-framework/dg-warning-exp-F.c (revision 0) @@ -0,0 +1,10 @@ +/* Test the tester; previously part of gcc.misc-tests/dg-9.c. */ +/* { dg-prms-id 42 } */ +/* { dg-options "-Wall" } */ + +int main (int argc, char *argv[]) +{ + +; /* { dg-warning "expected expression" "error test" } */ + return 0; +} + Index: gcc/testsuite/gcc.test-framework/README =================================================================== --- gcc/testsuite/gcc.test-framework/README (revision 121027) +++ gcc/testsuite/gcc.test-framework/README (working copy) @@ -19,7 +19,7 @@ To run these tests: To check the results: TF=${SRC}/gcc/testsuite/gcc.test-framework - awk -f ${TF}/test-framework.awk gcc/testsuite/gcc.sum + awk -f ${TF}/test-framework.awk gcc/testsuite/gcc/gcc.sum The awk script prints unexpected results followed by the number of tests that passed and failed. Index: gcc/testsuite/lib/gfortran-dg.exp =================================================================== --- gcc/testsuite/lib/gfortran-dg.exp (revision 121027) +++ gcc/testsuite/lib/gfortran-dg.exp (working copy) @@ -107,3 +107,14 @@ proc gfortran-dg-runtest { testcases def } } } + + +if { [info procs gfortran-saved-dg-warning] == [list] } { + rename dg-warning gfortran-saved-dg-warning + rename saved-dg-warning dg-warning +} + +if { [info procs gfortran-saved-dg-error] == [list] } { + rename dg-error gfortran-saved-dg-error + rename saved-dg-error dg-error +} Index: gcc/testsuite/lib/gcc-dg.exp =================================================================== --- gcc/testsuite/lib/gcc-dg.exp (revision 121027) +++ gcc/testsuite/lib/gcc-dg.exp (working copy) @@ -540,4 +540,78 @@ if { [info procs saved-dg-test] == [list } } +if { [info procs saved-dg-warning] == [list] } { + rename dg-warning saved-dg-warning + + proc dg-warning { args } { + upvar dg-messages messages + + if { [llength $args] > 5 } { + error "[lindex $args 0]: too many arguments" + return + } + + set xfail "" + if { [llength $args] >= 4 } { + switch [dg-process-target [lindex $args 3]] { + "F" { set xfail "X" } + "P" { set xfail "" } + "N" { + # If we get "N", this warning doesn't apply to us so ignore it. + return + } + } + } + + if { [llength $args] >= 5 } { + switch [lindex $args 4] { + "." { set line [dg-format-linenum [lindex $args 0]] } + "0" { set line "" } + "default" { set line [dg-format-linenum [lindex $args 4]] } + } + } else { + set line [dg-format-linenum [lindex $args 0]] + } + + lappend messages [list $line "${xfail}WARNING" [concat "\[wW\]arning:\[^\n\]*" [lindex $args 1]] [lindex $args 2]] + } +} + +if { [info procs saved-dg-error] == [list] } { + rename dg-error saved-dg-error + + proc dg-error { args } { + upvar dg-messages messages + + if { [llength $args] > 5 } { + error "[lindex $args 0]: too many arguments" + return + } + + set xfail "" + if { [llength $args] >= 4 } { + switch [dg-process-target [lindex $args 3]] { + "F" { set xfail "X" } + "P" { set xfail "" } + "N" { + # If we get "N", this error doesn't apply to us so ignore it. + return + } + } + } + + if { [llength $args] >= 5 } { + switch [lindex $args 4] { + "." { set line [dg-format-linenum [lindex $args 0]] } + "0" { set line "" } + "default" { set line [dg-format-linenum [lindex $args 4]] } + } + } else { + set line [dg-format-linenum [lindex $args 0]] + } + + lappend messages [list $line "${xfail}ERROR" [concat "\[eE\]rror:\[^\n\]*" [lindex $args 1]] [lindex $args 2]] + } +} + set additional_prunes "" -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25241