On Thu, May 15, 2025 at 7:30 PM Jonathan Wakely <jwak...@redhat.com> wrote:
> When the last format argument to a Tcl proc is named 'args' it has > special meaning and is a list that accepts any number of arguments[1]. > This means when "" is passed to the proc and then we expand "$args" we > get an empty list formatted as "{}". My r16-537-g3e2b83faeb6b14 change > broke all uses of dg-require-namedlocale with empty locale names, "". > > By changing the name of the formal argument to 'locale' we avoid the > special behaviour for 'args' and now it only accepts a single argument > (as was always intended). When expanded as "$locale" we get "" as I > expected. > > [1] https://www.tcl-lang.org/man/tcl9.0/TclCmd/proc.html > > libstdc++-v3/ChangeLog: > > PR libstdc++/65909 > * testsuite/lib/libstdc++.exp (check_v3_target_namedlocale): > Change name of formal argument to locale. > --- > > Tested x86_64-linux. > LGTM. Thanks for the link. > > I also plan to audit the other procs in libstdc++.exp to see if they > should not use 'args', but that can be done later. The priority for now > is to fix what I broke recently. > > libstdc++-v3/testsuite/lib/libstdc++.exp | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp > b/libstdc++-v3/testsuite/lib/libstdc++.exp > index da1f4245e4b8..9f2dd8a17248 100644 > --- a/libstdc++-v3/testsuite/lib/libstdc++.exp > +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp > @@ -1019,8 +1019,8 @@ proc check_v3_target_time { } { > }] > } > > -proc check_v3_target_namedlocale { args } { > - set key "et_namedlocale $args" > +proc check_v3_target_namedlocale { locale } { > + set key "et_namedlocale $locale" > return [check_v3_target_prop_cached $key { > global tool > # Set up, compile, and execute a C++ test program that tries to use > @@ -1048,7 +1048,7 @@ proc check_v3_target_namedlocale { args } { > puts $f "}" > puts $f "int main ()" > puts $f "{" > - puts $f " const char *namedloc = transform_locale(\"$args\");" > + puts $f " const char *namedloc = transform_locale(\"$locale\");" > puts $f " try" > puts $f " {" > puts $f " locale((const char*)namedloc);" > @@ -1075,7 +1075,7 @@ proc check_v3_target_namedlocale { args } { > set result [${tool}_load "./$exe" "" ""] > set status [lindex $result 0] > > - verbose "check_v3_target_namedlocale <$args>: status is <$status>" > 2 > + verbose "check_v3_target_namedlocale <$locale>: status is > <$status>" 2 > > if { $status == "pass" } { > return 1 > -- > 2.49.0 > >