Module Name: src Committed By: rillig Date: Sun Feb 4 09:29:50 UTC 2024
Modified Files: src/usr.bin/make/unit-tests: varmod-indirect.exp varmod-indirect.mk Log Message: tests/make: extend test for wrong evaluation in parse-only mode To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/usr.bin/make/unit-tests/varmod-indirect.exp cvs rdiff -u -r1.15 -r1.16 src/usr.bin/make/unit-tests/varmod-indirect.mk Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/unit-tests/varmod-indirect.exp diff -u src/usr.bin/make/unit-tests/varmod-indirect.exp:1.24 src/usr.bin/make/unit-tests/varmod-indirect.exp:1.25 --- src/usr.bin/make/unit-tests/varmod-indirect.exp:1.24 Sun Feb 4 08:51:57 2024 +++ src/usr.bin/make/unit-tests/varmod-indirect.exp Sun Feb 4 09:29:50 2024 @@ -38,8 +38,10 @@ Parsing line 197: .MAKEFLAGS: -d0 ParseDependency(.MAKEFLAGS: -d0) Global: .MAKEFLAGS = -r -k -d 0 -d pv -d Global: .MAKEFLAGS = -r -k -d 0 -d pv -d 0 -make: "varmod-indirect.mk" line 274: Unknown modifier "Z" -make: "varmod-indirect.mk" line 274: Malformed conditional (0 && ${VAR:${M_invalid}}) +make: "varmod-indirect.mk" line 275: Unknown modifier "Z" +make: "varmod-indirect.mk" line 275: Malformed conditional (0 && ${VAR:${M_invalid}}) +make: "varmod-indirect.mk" line 287: Unknown modifier "Z" +make: "varmod-indirect.mk" line 287: Malformed conditional (0 && ${VAR:${M_invalid:@m@N*$m@:ts:}}) make: Fatal errors encountered -- cannot continue make: stopped in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/varmod-indirect.mk diff -u src/usr.bin/make/unit-tests/varmod-indirect.mk:1.15 src/usr.bin/make/unit-tests/varmod-indirect.mk:1.16 --- src/usr.bin/make/unit-tests/varmod-indirect.mk:1.15 Sun Feb 4 08:51:57 2024 +++ src/usr.bin/make/unit-tests/varmod-indirect.mk Sun Feb 4 09:29:50 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-indirect.mk,v 1.15 2024/02/04 08:51:57 rillig Exp $ +# $NetBSD: varmod-indirect.mk,v 1.16 2024/02/04 09:29:50 rillig Exp $ # # Tests for indirect variable modifiers, such as in ${VAR:${M_modifiers}}. # These can be used for very basic purposes like converting a string to either @@ -258,8 +258,9 @@ _:= before ${UNDEF:${:UZ}} after # In parse-only mode, the indirect modifiers must not be evaluated. # -# Before var.c 1.1096 from 2024-02-04, the expression for an indirect modifier -# was evaluated. +# Before var.c 1.1097 from 2024-02-04, the expression for an indirect modifier +# was partially evaluated (only the variable value, without applying any +# modifiers) and then interpreted as modifiers to the main expression. # # The expression ${:UZ} starts with the value "", and in parse-only mode, the # modifier ':UZ' does not modify the expression value. This results in an @@ -273,3 +274,15 @@ M_invalid= Z # expect+1: Malformed conditional (0 && ${VAR:${M_invalid}}) .if 0 && ${VAR:${M_invalid}} .endif +# The expression ${M_invalid} starts with the value "Z", and if its modifiers +# were evaluated, would result in "N*Z", which is a valid modifier. The +# modifiers were not applied though, keeping the invalid value "Z". +# FIXME: As of var.c 1.1096, the modifier ':S' _is_ actually evaluated. +.if 0 && ${VAR:${M_invalid:S,^,N*,:ts:}} +.endif +# The ':@' modifier does not change the expression value in parse-only mode, +# keeping the "Z". +# expect+2: Unknown modifier "Z" +# expect+1: Malformed conditional (0 && ${VAR:${M_invalid:@m@N*$m@:ts:}}) +.if 0 && ${VAR:${M_invalid:@m@N*$m@:ts:}} +.endif