On Tue, 27 May 2025 23:57:03 GMT, Magnus Ihse Bursie <i...@openjdk.org> wrote:
> This is a redo of [JDK-8357048](https://bugs.openjdk.org/browse/JDK-8357048), > which had to backed out since it caused testing errors in higher tiers. > > The problem was that `JTREG_PROBLEM_LIST_PREFIX` was not defined before it > was used, and when `JTREG_BASIC_OPTIONS` were no longer implicitly declared > as a macro, but instead got a definite assignment, the value of > JTREG_PROBLEM_LIST_PREFIX was empty at the time of evaluation. > > I have now manually checked each and every `+=` assignment to > `$1_JTREG_BASIC_OPTIONS`, and verified that all variables present is defined > earlier. > > Here is the original description from JBS: > > When building `$1_JTREG_BASIC_OPTIONS`, it is assumed that the variable is > recursively defined and that thus `+=` is lazy. > > > $1_JTREG_BASIC_OPTIONS += -$$($1_JTREG_TEST_MODE) \ > -verbose:$$(JTREG_VERBOSE) -retain:$$(JTREG_RETAIN) \ > -concurrency:$$($1_JTREG_JOBS) > -timeoutFactor:$$(JTREG_TIMEOUT_FACTOR) \ > -vmoption:-XX:MaxRAMPercentage=$$($1_JTREG_MAX_RAM_PERCENTAGE) \ > -vmoption:-Dtest.boot.jdk="$$(BOOT_JDK)" \ > -vmoption:-Djava.io.tmpdir="$$($1_TEST_TMP_DIR)" > ``` > > If `+=` is eagerly evaluated, the option -timeoutFactor: will get an empty > argument and fail. > > The problem is the line: `$$(eval $$(call > SetJtregValue,$1,JTREG_BASIC_OPTIONS))` might create the variable > `$1_JTREG_BASIC_OPTIONS` "simply expanded" (the expansion will create an > assignment using `:=`). Whereas if the variable is not created the first `+=` > will be recursive and will work as expected. > > One solution to this problem is replacing the three assignments in > `SetJtregValue` from `:=` to `=`. This might have other side effects. > > A more conservative solution might be to create another macro (thus not > changing behaviour where strict evaluation might be needed): > > define SetJtregRecursiveValue > ifneq ($$($2), ) > $1_$2 = $$($2) > else > ifneq ($$($$($1_COMPONENT)_$2), ) > $1_$2 = $$($$($1_COMPONENT)_$2) > else > ifneq ($3, ) > $1_$2 = $3 > endif > endif > endif > endef This pull request has now been integrated. Changeset: a4f870df Author: Magnus Ihse Bursie <i...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/a4f870df553e4d7669edf6e454e147526ff2fae7 Stats: 18 lines in 1 file changed: 11 ins; 6 del; 1 mod 8357510: [REDO] RunTest variables should always be assigned Reviewed-by: erikj ------------- PR: https://git.openjdk.org/jdk/pull/25475