From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22402 invoked by alias); 5 Dec 2012 23:29:12 -0000 Received: (qmail 22393 invoked by uid 22791); 5 Dec 2012 23:29:11 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 05 Dec 2012 23:29:04 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id qB5NT29O020579 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 5 Dec 2012 18:29:02 -0500 Received: from zalov.redhat.com (vpn1-5-46.ams2.redhat.com [10.36.5.46]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id qB5NT0me025553 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 5 Dec 2012 18:29:01 -0500 Received: from zalov.cz (localhost [127.0.0.1]) by zalov.redhat.com (8.14.5/8.14.5) with ESMTP id qB5NSxSM012091; Thu, 6 Dec 2012 00:28:59 +0100 Received: (from jakub@localhost) by zalov.cz (8.14.5/8.14.5/Submit) id qB5NSxSq012090; Thu, 6 Dec 2012 00:28:59 +0100 Date: Wed, 05 Dec 2012 23:29:00 -0000 From: Jakub Jelinek To: Wei Mi Cc: Mike Stump , GCC Patches , David Li , Diego Novillo , Kostya Serebryany , Dodji Seketeli Subject: [asan] Fix up dg-set-target-env-var Message-ID: <20121205232858.GE2315@tucnak.redhat.com> Reply-To: Jakub Jelinek References: <20121128101420.GG2315@tucnak.redhat.com> <20121203110018.GR2315@tucnak.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-12/txt/msg00364.txt.bz2 Hi! On Tue, Dec 04, 2012 at 10:00:35AM -0800, Wei Mi wrote: > I updated the patch according to the comments. Please take a look. Thanks. I've been testing your patch plus all the patches from me posted yesterday just with asan.exp testing. While doing full pair of bootstraps/regtests, I've discovered dg-set-target-env-var changes don't really work, gcc-dg-runtest is just one of the many ways to start testing, so there were tons of errors like ERROR: tcl error sourcing /usr/src/gcc/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp. ERROR: can't read "set_target_env_var": no such variable ERROR: tcl error sourcing /usr/src/gcc/gcc/testsuite/gcc.dg/compat/struct-layout-1.exp. ERROR: can't read "set_target_env_var": no such variable ERROR: tcl error sourcing /usr/src/gcc/gcc/testsuite/gcc.dg/dg.exp. ERROR: can't read "set_target_env_var": no such variable ERROR: tcl error sourcing /usr/src/gcc/gcc/testsuite/gcc.dg/guality/guality.exp. ERROR: can't read "set_target_env_var": no such variable (and many more). Here is an attempt to fix that up. gcc-dg.exp overrides dg-test which is the actual routine that parses dg-* directives from the testcases, performs all the testing and then this overridden routine at the end does some cleanup, so I'm unsetting set_target_env_var there, and not relying on it being set. Furthermore, I don't think unsetenv takes two arguments, and the whole restore-target-env-var looked weird. IMHO we want to record which env vars were set to what values and which were unset, and restore that at the end of ${tool}_load. The error message change is because if there are no args (which means only line will be there), I'm afraid it would show up traceback. So far successfully regtested on i686-linux, x86_64-linux regtest is almost done. Ok for trunk? 2012-12-05 Jakub Jelinek * lib/gcc-dg.exp (${tool}_load): Handle non-existing set_target_env_var the same as if it is empty list. (dg-set-target-env-var): Fix up error message. (set-target-env-var): Record both preexisting env var values as well as info that env wasn't set. (restore-target-env-var): Iterate on reversed list, if second sublist element is 1, setenv the env var to the third sublist element, otherwise unsetenv it. (gcc-dg-runtest): Don't initialize set_target_env_var. (dg-test): Unset set_target_env_var if it was set. --- gcc/testsuite/lib/gcc-dg.exp.jj 2012-12-05 20:02:20.000000000 +0100 +++ gcc/testsuite/lib/gcc-dg.exp 2012-12-05 23:23:05.766914151 +0100 @@ -257,14 +257,16 @@ if { [info procs ${tool}_load] != [list] global set_target_env_var set saved_target_env_var [list] - if { [llength $set_target_env_var] != 0 } { + if { [info exists set_target_env_var] \ + && [llength $set_target_env_var] != 0 } { if { [is_remote target] } { return [list "unsupported" ""] } set-target-env-var } set result [eval [list saved_${tool}_load $program] $args] - if { [llength $set_target_env_var] != 0 } { + if { [info exists set_target_env_var] \ + && [llength $set_target_env_var] != 0 } { restore-target-env-var } if { $shouldfail != 0 } { @@ -281,7 +283,7 @@ if { [info procs ${tool}_load] != [list] proc dg-set-target-env-var { args } { global set_target_env_var if { [llength $args] != 3 } { - error "[lindex $args 1]: need two arguments" + error "dg-set-target-env-var: need two arguments" return } lappend set_target_env_var [list [lindex $args 1] [lindex $args 2]] @@ -294,7 +296,9 @@ proc set-target-env-var { } { set var [lindex $env_var 0] set value [lindex $env_var 1] if [info exists env($var)] { - lappend saved_target_env_var [list $var $env($var)] + lappend saved_target_env_var [list $var 1 $env($var)] + } else { + lappend saved_target_env_var [list $var 0] } setenv $var $value } @@ -302,10 +306,13 @@ proc set-target-env-var { } { proc restore-target-env-var { } { upvar 1 saved_target_env_var saved_target_env_var - foreach env_var $saved_target_env_var { + foreach env_var [lreverse $saved_target_env_var] { set var [lindex $env_var 0] - set value [lindex $env_var 1] - unsetenv $var $value + if [lindex $env_var 1] { + setenv $var [lindex $env_var 2] + } else { + unsetenv $var + } } } @@ -330,10 +337,6 @@ proc search_for { file pattern } { # as c-torture does. proc gcc-dg-runtest { testcases default-extra-flags } { global runtests - global set_target_env_var - - # Init set_target_env_var - set set_target_env_var [list] # Some callers set torture options themselves; don't override those. set existing_torture_options [torture-options-exist] @@ -724,6 +727,7 @@ if { [info procs saved-dg-test] == [list global compiler_conditional_xfail_data global shouldfail global testname_with_flags + global set_target_env_var if { [ catch { eval saved-dg-test $args } errmsg ] } { set saved_info $errorInfo @@ -744,6 +748,9 @@ if { [info procs saved-dg-test] == [list set additional_sources "" set additional_prunes "" set shouldfail 0 + if [info exists set_target_env_var] { + unset set_target_env_var + } unset_timeout_vars if [info exists compiler_conditional_xfail_data] { unset compiler_conditional_xfail_data Jakub