From: Christoph Müllner <christoph.muell...@vrull.eu> A recent change (5fafcd43) introduced a command line argument cache, that ensures that command line arguments have a higher priority than configuration files.
That cache uses the following code to save and restore: save_cmd_var: upvar 1 $name target_var restore_cmd_vars" uplevel 1 set $name $value This works well unless $value becomes a multi-word string (i.e. a string that contains spaces), because in this case the command becomes: uplevel 1 set $name arg-word0 arg-word1 ... Obviously this will trigger the following error: wrong # args: should be "set varName ?newValue?" Quoting "$value" does not help, because the quotes are evaluated before executing set. Let's fix this by using upvar for the restore code as well: upvar 1 $name target_var set $target_var "$value" Here, the quotes will be evaluated when executing the set command. This has been reported in a downstream project, where this bug prevented running the GCC regression tests when building in multilib configuration: https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1201 The actual command in this report was: set target_list riscv-sim/-march=rv32imac/-mabi=ilp32/-mcmodel=medlow \ riscv-sim/-march=rv32imafdc/-mabi=ilp32d/-mcmodel=medlow \ riscv-sim/-march=rv64imac/-mabi=lp64/-mcmodel=medlow \ riscv-sim/-march=rv64imafdc/-mabi=lp64d/-mcmod Signed-off-by: Christoph Müllner <christoph.muell...@vrull.eu> --- runtest.exp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtest.exp b/runtest.exp index 7c6018f..0829fda 100644 --- a/runtest.exp +++ b/runtest.exp @@ -432,7 +432,8 @@ namespace eval ::dejagnu::command_line { variable cmd_var_list foreach {name value} $cmd_var_list { - uplevel 1 set $name $value + upvar 1 $name target_var + set $target_var "$value" } verbose "Variables set by command line arguments restored." 4 } -- 2.39.2