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