Module Name: src
Committed By: rillig
Date: Fri Jul 5 17:41:50 UTC 2024
Modified Files:
src/usr.bin/make/unit-tests: cmd-errors-jobs.mk cmd-errors-lint.mk
cmd-errors.mk directive-for-escape.exp directive-for-escape.mk
moderrs.mk varmisc.mk varmod-edge.exp varmod-edge.mk
varmod-order.exp varmod-order.mk varparse-errors.mk
Log Message:
tests/make: add expected messages for "Unclosed expression"
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/cmd-errors-lint.mk
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/cmd-errors.mk
cvs rdiff -u -r1.25 -r1.26 \
src/usr.bin/make/unit-tests/directive-for-escape.exp
cvs rdiff -u -r1.23 -r1.24 \
src/usr.bin/make/unit-tests/directive-for-escape.mk
cvs rdiff -u -r1.35 -r1.36 src/usr.bin/make/unit-tests/moderrs.mk
cvs rdiff -u -r1.33 -r1.34 src/usr.bin/make/unit-tests/varmisc.mk
cvs rdiff -u -r1.20 -r1.21 src/usr.bin/make/unit-tests/varmod-edge.exp
cvs rdiff -u -r1.22 -r1.23 src/usr.bin/make/unit-tests/varmod-edge.mk
cvs rdiff -u -r1.11 -r1.12 src/usr.bin/make/unit-tests/varmod-order.exp
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/make/unit-tests/varmod-order.mk
cvs rdiff -u -r1.14 -r1.15 src/usr.bin/make/unit-tests/varparse-errors.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/cmd-errors-jobs.mk
diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.5 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.6
--- src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.5 Thu Jul 4 17:47:54 2024
+++ src/usr.bin/make/unit-tests/cmd-errors-jobs.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: cmd-errors-jobs.mk,v 1.5 2024/07/04 17:47:54 rillig Exp $
+# $NetBSD: cmd-errors-jobs.mk,v 1.6 2024/07/05 17:41:50 rillig Exp $
#
# Demonstrate how errors in expressions affect whether the commands
# are actually executed in jobs mode.
@@ -13,22 +13,22 @@ all: undefined unclosed-expression unclo
undefined:
: $@-${UNDEFINED}-eol
-# XXX: This command is executed even though it contains parse errors.
+unclosed-expression:
# expect: make: in target "unclosed-expression": Unclosed variable "UNCLOSED"
+# XXX: This command is executed even though it contains parse errors.
# expect: : unclosed-expression-
-unclosed-expression:
: $@-${UNCLOSED
-# XXX: This command is executed even though it contains parse errors.
+unclosed-modifier:
# expect: make: Unclosed expression, expecting '}' for "UNCLOSED"
+# XXX: This command is executed even though it contains parse errors.
# expect: : unclosed-modifier-
-unclosed-modifier:
: $@-${UNCLOSED:
-# XXX: This command is executed even though it contains parse errors.
+unknown-modifier:
# expect: make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z"
+# XXX: This command is executed even though it contains parse errors.
# expect: : unknown-modifier--eol
-unknown-modifier:
: $@-${UNKNOWN:Z}-eol
# expect: : end-eol
Index: src/usr.bin/make/unit-tests/cmd-errors-lint.mk
diff -u src/usr.bin/make/unit-tests/cmd-errors-lint.mk:1.2 src/usr.bin/make/unit-tests/cmd-errors-lint.mk:1.3
--- src/usr.bin/make/unit-tests/cmd-errors-lint.mk:1.2 Tue Apr 23 22:51:28 2024
+++ src/usr.bin/make/unit-tests/cmd-errors-lint.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: cmd-errors-lint.mk,v 1.2 2024/04/23 22:51:28 rillig Exp $
+# $NetBSD: cmd-errors-lint.mk,v 1.3 2024/07/05 17:41:50 rillig Exp $
#
# Demonstrate how errors in expressions affect whether the commands
# are actually executed.
@@ -10,24 +10,29 @@ all: undefined unclosed-expression unclo
# Undefined variables in expressions are not an error. They expand to empty
# strings.
undefined:
+# expect: : undefined
: $@ ${UNDEFINED}
-# XXX: As of 2020-11-01, this obvious syntax error is not detected.
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
unclosed-expression:
+# expect: make: in target "unclosed-expression": Unclosed variable "UNCLOSED"
+# XXX: This command is executed even though it contains parse errors.
+# expect: : unclosed-expression
: $@ ${UNCLOSED
-# XXX: As of 2020-11-01, this obvious syntax error is not detected.
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
unclosed-modifier:
+# expect: make: Unclosed expression, expecting '}' for "UNCLOSED"
+# XXX: This command is executed even though it contains parse errors.
+# expect: : unclosed-modifier
: $@ ${UNCLOSED:
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
unknown-modifier:
+# expect: make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z"
+# XXX: This command is executed even though it contains parse errors.
+# expect: : unknown-modifier
: $@ ${UNKNOWN:Z}
end:
+# expect: : end
: $@
+
+# expect: exit status 2
Index: src/usr.bin/make/unit-tests/cmd-errors.mk
diff -u src/usr.bin/make/unit-tests/cmd-errors.mk:1.6 src/usr.bin/make/unit-tests/cmd-errors.mk:1.7
--- src/usr.bin/make/unit-tests/cmd-errors.mk:1.6 Tue Apr 23 22:51:28 2024
+++ src/usr.bin/make/unit-tests/cmd-errors.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: cmd-errors.mk,v 1.6 2024/04/23 22:51:28 rillig Exp $
+# $NetBSD: cmd-errors.mk,v 1.7 2024/07/05 17:41:50 rillig Exp $
#
# Demonstrate how errors in expressions affect whether the commands
# are actually executed in compat mode.
@@ -8,24 +8,30 @@ all: undefined unclosed-expression unclo
# Undefined variables in expressions are not an error. They expand to empty
# strings.
undefined:
+# expect: : undefined--eol
: $@-${UNDEFINED}-eol
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
unclosed-expression:
+# expect: make: in target "unclosed-expression": Unclosed variable "UNCLOSED"
+# XXX: This command is executed even though it contains parse errors.
+# expect: : unclosed-expression-
: $@-${UNCLOSED
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
unclosed-modifier:
+# expect: make: Unclosed expression, expecting '}' for "UNCLOSED"
+# XXX: This command is executed even though it contains parse errors.
+# expect: : unclosed-modifier-
: $@-${UNCLOSED:
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
unknown-modifier:
+# expect: make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z"
+# XXX: This command is executed even though it contains parse errors.
+# expect: : unknown-modifier--eol
: $@-${UNKNOWN:Z}-eol
end:
+# expect: : end-eol
: $@-eol
-# XXX: As of 2020-11-02, despite the parse errors, the exit status is 0.
+# XXX: Despite the parse errors, the exit status is 0.
+# expect: exit status 0
Index: src/usr.bin/make/unit-tests/directive-for-escape.exp
diff -u src/usr.bin/make/unit-tests/directive-for-escape.exp:1.25 src/usr.bin/make/unit-tests/directive-for-escape.exp:1.26
--- src/usr.bin/make/unit-tests/directive-for-escape.exp:1.25 Thu Jul 4 17:47:54 2024
+++ src/usr.bin/make/unit-tests/directive-for-escape.exp Fri Jul 5 17:41:50 2024
@@ -1,45 +1,49 @@
For: end for 1
For: loop body with chars = !"#$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~:
+# expect: make: Unclosed expression, expecting '}' for modifier "U!"" of variable "" with value "!""
+# expect+1: !"
. info ${:U!"#$%&'()*+,-./0-9\:;<=>?@A-Z[\\]_^a-z{|\}~}
make: Unclosed expression, expecting '}' for modifier "U!"" of variable "" with value "!""
-make: "directive-for-escape.mk" line 19: !"
+make: "directive-for-escape.mk" line 21: !"
For: end for 1
For: loop body with chars = !"\\#$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~:
+# expect: make: Unclosed expression, expecting '}' for modifier "U!"\\\\" of variable "" with value "!"\\"
+# expect+1: !"\\
. info ${:U!"\\\\#$%&'()*+,-./0-9\:;<=>?@A-Z[\\]_^a-z{|\}~}
make: Unclosed expression, expecting '}' for modifier "U!"\\\\" of variable "" with value "!"\\"
-make: "directive-for-escape.mk" line 30: !"\\
+make: "directive-for-escape.mk" line 33: !"\\
For: end for 1
For: loop body with i = $:
. info ${:U\$}
-make: "directive-for-escape.mk" line 45: $
+make: "directive-for-escape.mk" line 47: $
For: loop body with i = ${V}:
. info ${:U${V}}
-make: "directive-for-escape.mk" line 45: value
+make: "directive-for-escape.mk" line 47: value
For: loop body with i = ${V:=-with-modifier}:
. info ${:U${V:=-with-modifier}}
-make: "directive-for-escape.mk" line 45: value-with-modifier
+make: "directive-for-escape.mk" line 47: value-with-modifier
For: loop body with i = $(V):
. info ${:U$(V)}
-make: "directive-for-escape.mk" line 45: value
+make: "directive-for-escape.mk" line 47: value
For: loop body with i = $(V:=-with-modifier):
. info ${:U$(V:=-with-modifier)}
-make: "directive-for-escape.mk" line 45: value-with-modifier
+make: "directive-for-escape.mk" line 47: value-with-modifier
For: end for 1
For: loop body with i = $:
. info ${:U\$}
-make: "directive-for-escape.mk" line 60: $
+make: "directive-for-escape.mk" line 62: $
For: loop body with i = ${V}:
. info ${:U${V}}
-make: "directive-for-escape.mk" line 60: value
+make: "directive-for-escape.mk" line 62: value
For: loop body with i = ${V:=-with-modifier}:
. info ${:U${V:=-with-modifier}}
-make: "directive-for-escape.mk" line 60: value-with-modifier
+make: "directive-for-escape.mk" line 62: value-with-modifier
For: loop body with i = $(V):
. info ${:U$(V)}
-make: "directive-for-escape.mk" line 60: value
+make: "directive-for-escape.mk" line 62: value
For: loop body with i = $(V:=-with-modifier):
. info ${:U$(V:=-with-modifier)}
-make: "directive-for-escape.mk" line 60: value-with-modifier
+make: "directive-for-escape.mk" line 62: value-with-modifier
For: end for 1
For: loop body with i = ${UNDEF:U\$\$:
# ${:U\${UNDEF\:U\\$\\$}
@@ -50,24 +54,24 @@ For: loop body with i = end}:
For: end for 1
For: loop body with i = ${UNDEF:U\$\$:
. info ${:U\${UNDEF\:U\\$\\$}
-make: "directive-for-escape.mk" line 115: ${UNDEF:U\backslash$
+make: "directive-for-escape.mk" line 117: ${UNDEF:U\backslash$
For: loop body with i = {{}}:
. info ${:U{{\}\}}
-make: "directive-for-escape.mk" line 115: {{}}
+make: "directive-for-escape.mk" line 117: {{}}
For: loop body with i = end}:
. info ${:Uend\}}
-make: "directive-for-escape.mk" line 115: end}
+make: "directive-for-escape.mk" line 117: end}
For: end for 1
For: loop body with i = begin<${UNDEF:Ufallback:N{{{}}}}>end:
. info ${:Ubegin<${UNDEF:Ufallback:N{{{}}}}>end}
-make: "directive-for-escape.mk" line 136: begin<fallback>end
+make: "directive-for-escape.mk" line 138: begin<fallback>end
For: end for 1
For: loop body with i = $:
. info ${:U\$}
-make: "directive-for-escape.mk" line 145: $
-make: "directive-for-escape.mk" line 154: invalid character ':' in .for loop variable name
+make: "directive-for-escape.mk" line 147: $
+make: "directive-for-escape.mk" line 156: invalid character ':' in .for loop variable name
For: end for 1
-make: "directive-for-escape.mk" line 164: invalid character '}' in .for loop variable name
+make: "directive-for-escape.mk" line 166: invalid character '}' in .for loop variable name
For: end for 1
For: end for 1
For: loop body with i = inner:
@@ -81,50 +85,50 @@ For: loop body with i = inner:
. info . $${i2}: ${i2}
. info . $${i,}: ${i,}
. info . adjacent: ${:Uinner}${:Uinner}${:Uinner:M*}${:Uinner}
-make: "directive-for-escape.mk" line 173: . $i: inner
-make: "directive-for-escape.mk" line 174: . ${i}: inner
-make: "directive-for-escape.mk" line 175: . ${i:M*}: inner
-make: "directive-for-escape.mk" line 176: . $(i): inner
-make: "directive-for-escape.mk" line 177: . $(i:M*): inner
-make: "directive-for-escape.mk" line 178: . ${i${:U}}: outer
-make: "directive-for-escape.mk" line 179: . ${i\}}: inner}
-make: "directive-for-escape.mk" line 180: . ${i2}: two
-make: "directive-for-escape.mk" line 181: . ${i,}: comma
-make: "directive-for-escape.mk" line 182: . adjacent: innerinnerinnerinner
-make: "directive-for-escape.mk" line 201: invalid character '$' in .for loop variable name
+make: "directive-for-escape.mk" line 175: . $i: inner
+make: "directive-for-escape.mk" line 176: . ${i}: inner
+make: "directive-for-escape.mk" line 177: . ${i:M*}: inner
+make: "directive-for-escape.mk" line 178: . $(i): inner
+make: "directive-for-escape.mk" line 179: . $(i:M*): inner
+make: "directive-for-escape.mk" line 180: . ${i${:U}}: outer
+make: "directive-for-escape.mk" line 181: . ${i\}}: inner}
+make: "directive-for-escape.mk" line 182: . ${i2}: two
+make: "directive-for-escape.mk" line 183: . ${i,}: comma
+make: "directive-for-escape.mk" line 184: . adjacent: innerinnerinnerinner
+make: "directive-for-escape.mk" line 203: invalid character '$' in .for loop variable name
For: end for 1
-make: "directive-for-escape.mk" line 213: eight and no cents.
+make: "directive-for-escape.mk" line 215: eight and no cents.
For: end for 1
-make: "directive-for-escape.mk" line 226: newline in .for value
- in .for loop from directive-for-escape.mk:226 with i = "
+make: "directive-for-escape.mk" line 228: newline in .for value
+ in .for loop from directive-for-escape.mk:228 with i = "
"
-make: "directive-for-escape.mk" line 226: newline in .for value
- in .for loop from directive-for-escape.mk:226 with i = "
+make: "directive-for-escape.mk" line 228: newline in .for value
+ in .for loop from directive-for-escape.mk:228 with i = "
"
For: loop body with i = "
":
. info short: ${:U" "}
. info long: ${:U" "}
-make: "directive-for-escape.mk" line 227: short: " "
-make: "directive-for-escape.mk" line 228: long: " "
+make: "directive-for-escape.mk" line 229: short: " "
+make: "directive-for-escape.mk" line 230: long: " "
For: end for 1
For: loop body with i = "
":
-Parsing line 244: .for i in "${.newline}"
+Parsing line 246: .for i in "${.newline}"
For: end for 1
-Parse_PushInput: .for loop in directive-for-escape.mk, line 244
-make: "directive-for-escape.mk" line 244: newline in .for value
- in .for loop from directive-for-escape.mk:244 with i = "
+Parse_PushInput: .for loop in directive-for-escape.mk, line 246
+make: "directive-for-escape.mk" line 246: newline in .for value
+ in .for loop from directive-for-escape.mk:246 with i = "
"
For: loop body with i = "
":
: ${:U" "}
SetFilenameVars: ${.PARSEDIR} = <some-dir> ${.PARSEFILE} = `directive-for-escape.mk'
-Parsing line 245: : ${:U" "}
+Parsing line 247: : ${:U" "}
ParseDependency(: " ")
-ParseEOF: returning to file directive-for-escape.mk, line 247
+ParseEOF: returning to file directive-for-escape.mk, line 249
SetFilenameVars: ${.PARSEDIR} = <some-dir> ${.PARSEFILE} = `directive-for-escape.mk'
-Parsing line 247: .MAKEFLAGS: -d0
+Parsing line 249: .MAKEFLAGS: -d0
ParseDependency(.MAKEFLAGS: -d0)
For: end for 1
For: loop body with i = #:
Index: src/usr.bin/make/unit-tests/directive-for-escape.mk
diff -u src/usr.bin/make/unit-tests/directive-for-escape.mk:1.23 src/usr.bin/make/unit-tests/directive-for-escape.mk:1.24
--- src/usr.bin/make/unit-tests/directive-for-escape.mk:1.23 Sun Nov 19 22:32:44 2023
+++ src/usr.bin/make/unit-tests/directive-for-escape.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for-escape.mk,v 1.23 2023/11/19 22:32:44 rillig Exp $
+# $NetBSD: directive-for-escape.mk,v 1.24 2024/07/05 17:41:50 rillig Exp $
#
# Test escaping of special characters in the iteration values of a .for loop.
# These values get expanded later using the :U variable modifier, and this
@@ -16,9 +16,10 @@ ASCII= !"\#$$%&'()*+,-./0-9:;<=>?@A-Z[\]
# the loop. Not only would it need the escaping for the variable modifier
# ':U' but also the escaping for the line-end comment.
.for chars in ${ASCII}
+# expect: make: Unclosed expression, expecting '}' for modifier "U!"" of variable "" with value "!""
+# expect+1: !"
. info ${chars}
.endfor
-# expect-2: !"
# As of 2020-12-31, using 2 backslashes before be '#' would treat the '#'
# as comment character. Using 3 backslashes doesn't help either since
@@ -27,9 +28,10 @@ ASCII= !"\#$$%&'()*+,-./0-9:;<=>?@A-Z[\]
# at all.
ASCII.2020-12-31= !"\\\#$$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~
.for chars in ${ASCII.2020-12-31}
+# expect: make: Unclosed expression, expecting '}' for modifier "U!"\\\\" of variable "" with value "!"\\"
+# expect+1: !"\\
. info ${chars}
.endfor
-# expect-2: !"\\
# Cover the code in ExprLen.
#
Index: src/usr.bin/make/unit-tests/moderrs.mk
diff -u src/usr.bin/make/unit-tests/moderrs.mk:1.35 src/usr.bin/make/unit-tests/moderrs.mk:1.36
--- src/usr.bin/make/unit-tests/moderrs.mk:1.35 Thu Jul 4 18:53:37 2024
+++ src/usr.bin/make/unit-tests/moderrs.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: moderrs.mk,v 1.35 2024/07/04 18:53:37 rillig Exp $
+# $NetBSD: moderrs.mk,v 1.36 2024/07/05 17:41:50 rillig Exp $
#
# various modifier error tests
@@ -168,10 +168,13 @@ mod-remember-parse: print-footer
mod-sysv-parse: print-footer
# expect: make: in target "mod-sysv-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Unknown modifier "3"
+# expect: make: Unclosed expression, expecting '}' for modifier "3" of variable "FIB" with value ""
@echo ${FIB:3
# expect: make: in target "mod-sysv-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Unknown modifier "3="
+# expect: make: Unclosed expression, expecting '}' for modifier "3=" of variable "FIB" with value ""
@echo ${FIB:3=
# expect: make: in target "mod-sysv-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Unknown modifier "3=x3"
+# expect: make: Unclosed expression, expecting '}' for modifier "3=x3" of variable "FIB" with value ""
@echo ${FIB:3=x3
@echo ${FIB:3=x3} # ok
Index: src/usr.bin/make/unit-tests/varmisc.mk
diff -u src/usr.bin/make/unit-tests/varmisc.mk:1.33 src/usr.bin/make/unit-tests/varmisc.mk:1.34
--- src/usr.bin/make/unit-tests/varmisc.mk:1.33 Thu Oct 19 18:24:33 2023
+++ src/usr.bin/make/unit-tests/varmisc.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmisc.mk,v 1.33 2023/10/19 18:24:33 rillig Exp $
+# $NetBSD: varmisc.mk,v 1.34 2024/07/05 17:41:50 rillig Exp $
#
# Miscellaneous variable tests.
@@ -190,13 +190,22 @@ target2-flags: target2.c
varerror-unclosed:
@echo $@:begin
+# expect: make: in target "varerror-unclosed": Unclosed variable ""
@echo $(
+# expect: make: in target "varerror-unclosed": Unclosed variable "UNCLOSED"
@echo $(UNCLOSED
+# expect: make: in target "varerror-unclosed": Unclosed variable "UNCLOSED"
@echo ${UNCLOSED
+# expect: make: Unclosed expression, expecting '}' for modifier "M${PATTERN" of variable "UNCLOSED" with value ""
@echo ${UNCLOSED:M${PATTERN
+# expect: make: in target "varerror-unclosed": Unclosed variable "param"
+# expect: make: in target "varerror-unclosed": Unclosed variable "UNCLOSED."
@echo ${UNCLOSED.${param
@echo $
.for i in 1 2 3
+# expect: make: in target "varerror-unclosed": Unclosed variable "UNCLOSED.1"
+# expect: make: in target "varerror-unclosed": Unclosed variable "UNCLOSED.2"
+# expect: make: in target "varerror-unclosed": Unclosed variable "UNCLOSED.3"
@echo ${UNCLOSED.${i}
.endfor
@echo ${UNCLOSED_INDIR_2}
Index: src/usr.bin/make/unit-tests/varmod-edge.exp
diff -u src/usr.bin/make/unit-tests/varmod-edge.exp:1.20 src/usr.bin/make/unit-tests/varmod-edge.exp:1.21
--- src/usr.bin/make/unit-tests/varmod-edge.exp:1.20 Thu Jul 4 20:18:40 2024
+++ src/usr.bin/make/unit-tests/varmod-edge.exp Fri Jul 5 17:41:50 2024
@@ -1,30 +1,30 @@
-make: "varmod-edge.mk" line 185: ok M-paren
-make: "varmod-edge.mk" line 185: ok M-mixed
-make: "varmod-edge.mk" line 185: ok M-unescape
+make: "varmod-edge.mk" line 186: ok M-paren
+make: "varmod-edge.mk" line 186: ok M-mixed
+make: "varmod-edge.mk" line 186: ok M-unescape
make: Unclosed expression, expecting '}' for modifier "U*)" of variable "" with value "*)"
-make: "varmod-edge.mk" line 185: ok M-nest-mix
-make: "varmod-edge.mk" line 185: ok M-nest-brk
-make: "varmod-edge.mk" line 185: ok M-pat-err
-make: "varmod-edge.mk" line 185: ok M-bsbs
-make: "varmod-edge.mk" line 185: ok M-bs1-par
-make: "varmod-edge.mk" line 185: ok M-bs2-par
-make: "varmod-edge.mk" line 185: ok M-128
-make: "varmod-edge.mk" line 185: ok eq-ext
-make: "varmod-edge.mk" line 185: ok eq-q
-make: "varmod-edge.mk" line 185: ok eq-bs
+make: "varmod-edge.mk" line 186: ok M-nest-mix
+make: "varmod-edge.mk" line 186: ok M-nest-brk
+make: "varmod-edge.mk" line 186: ok M-pat-err
+make: "varmod-edge.mk" line 186: ok M-bsbs
+make: "varmod-edge.mk" line 186: ok M-bs1-par
+make: "varmod-edge.mk" line 186: ok M-bs2-par
+make: "varmod-edge.mk" line 186: ok M-128
+make: "varmod-edge.mk" line 186: ok eq-ext
+make: "varmod-edge.mk" line 186: ok eq-q
+make: "varmod-edge.mk" line 186: ok eq-bs
make: "varmod-edge.mk" line 168: while evaluating variable "MOD.eq-esc" with value "${INP.eq-esc:a\=b}": while evaluating variable "INP.eq-esc" with value "file.c file...": Unfinished modifier ('=' missing)
in .for loop from varmod-edge.mk:164 with test = eq-esc
-make: "varmod-edge.mk" line 185: ok eq-esc
-make: "varmod-edge.mk" line 185: ok colon
+make: "varmod-edge.mk" line 186: ok eq-esc
+make: "varmod-edge.mk" line 186: ok colon
make: "varmod-edge.mk" line 168: while evaluating variable "MOD.colons" with value "${INP.colons::::}": while evaluating variable "INP.colons" with value "value": Unknown modifier ":"
in .for loop from varmod-edge.mk:164 with test = colons
make: "varmod-edge.mk" line 168: while evaluating variable "MOD.colons" with value "${INP.colons::::}": while evaluating variable "INP.colons" with value "": Unknown modifier ":"
in .for loop from varmod-edge.mk:164 with test = colons
-make: "varmod-edge.mk" line 185: ok colons
-make: "varmod-edge.mk" line 196: while evaluating "${:Z}": Unknown modifier "Z"
-make: "varmod-edge.mk" line 196: Malformed conditional (${:Z})
-make: "varmod-edge.mk" line 210: while evaluating "${:S,}": Unfinished modifier (',' missing)
-make: "varmod-edge.mk" line 210: Malformed conditional (${:S,})
+make: "varmod-edge.mk" line 186: ok colons
+make: "varmod-edge.mk" line 197: while evaluating "${:Z}": Unknown modifier "Z"
+make: "varmod-edge.mk" line 197: Malformed conditional (${:Z})
+make: "varmod-edge.mk" line 211: while evaluating "${:S,}": Unfinished modifier (',' missing)
+make: "varmod-edge.mk" line 211: Malformed conditional (${:S,})
make: Fatal errors encountered -- cannot continue
make: stopped making "all" in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/varmod-edge.mk
diff -u src/usr.bin/make/unit-tests/varmod-edge.mk:1.22 src/usr.bin/make/unit-tests/varmod-edge.mk:1.23
--- src/usr.bin/make/unit-tests/varmod-edge.mk:1.22 Thu Jul 4 17:47:54 2024
+++ src/usr.bin/make/unit-tests/varmod-edge.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-edge.mk,v 1.22 2024/07/04 17:47:54 rillig Exp $
+# $NetBSD: varmod-edge.mk,v 1.23 2024/07/05 17:41:50 rillig Exp $
#
# Tests for edge cases in variable modifiers.
#
@@ -166,9 +166,10 @@ EXP.colons= # empty
# expect+2: while evaluating variable "MOD.colons" with value "${INP.colons::::}": while evaluating variable "INP.colons" with value "value": Unknown modifier ":"
# expect+1: while evaluating variable "MOD.colons" with value "${INP.colons::::}": while evaluating variable "INP.colons" with value "": Unknown modifier ":"
. if ${MOD.${test}} == ${EXP.${test}}
-# expect+16: ok M-paren
-# expect+15: ok M-mixed
-# expect+14: ok M-unescape
+# expect+17: ok M-paren
+# expect+16: ok M-mixed
+# expect+15: ok M-unescape
+# expect: make: Unclosed expression, expecting '}' for modifier "U*)" of variable "" with value "*)"
# expect+13: ok M-nest-mix
# expect+12: ok M-nest-brk
# expect+11: ok M-pat-err
Index: src/usr.bin/make/unit-tests/varmod-order.exp
diff -u src/usr.bin/make/unit-tests/varmod-order.exp:1.11 src/usr.bin/make/unit-tests/varmod-order.exp:1.12
--- src/usr.bin/make/unit-tests/varmod-order.exp:1.11 Thu Jul 4 20:18:40 2024
+++ src/usr.bin/make/unit-tests/varmod-order.exp Fri Jul 5 17:41:50 2024
@@ -5,22 +5,22 @@ make: "varmod-order.mk" line 23: Undefin
make: Unclosed expression, expecting '}' for modifier "O" of variable "WORDS" with value "eight five four nine one seven six ten three two"
make: Unclosed expression, expecting '}' for modifier "On" of variable "NUMBERS" with value "1 2 3 4 5 6 7 8 9 10"
make: Unclosed expression, expecting '}' for modifier "Onr" of variable "NUMBERS" with value "10 9 8 7 6 5 4 3 2 1"
-make: "varmod-order.mk" line 35: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Oxn"
-make: "varmod-order.mk" line 35: Malformed conditional (${NUMBERS:Oxn})
-make: "varmod-order.mk" line 45: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":On_typo"
-make: "varmod-order.mk" line 45: Malformed conditional (${NUMBERS:On_typo})
-make: "varmod-order.mk" line 55: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onr_typo"
-make: "varmod-order.mk" line 55: Malformed conditional (${NUMBERS:Onr_typo})
-make: "varmod-order.mk" line 65: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Orn_typo"
-make: "varmod-order.mk" line 65: Malformed conditional (${NUMBERS:Orn_typo})
-make: "varmod-order.mk" line 77: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onn"
-make: "varmod-order.mk" line 77: Malformed conditional (${NUMBERS:Onn})
-make: "varmod-order.mk" line 87: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onrr"
-make: "varmod-order.mk" line 87: Malformed conditional (${NUMBERS:Onrr})
-make: "varmod-order.mk" line 97: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Orrn"
-make: "varmod-order.mk" line 97: Malformed conditional (${NUMBERS:Orrn})
-make: "varmod-order.mk" line 112: while evaluating variable "SWITCH" with value "On": Bad modifier ":On=Off"
-make: "varmod-order.mk" line 112: Malformed conditional (${SWITCH:On=Off} != "Off")
+make: "varmod-order.mk" line 38: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Oxn"
+make: "varmod-order.mk" line 38: Malformed conditional (${NUMBERS:Oxn})
+make: "varmod-order.mk" line 48: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":On_typo"
+make: "varmod-order.mk" line 48: Malformed conditional (${NUMBERS:On_typo})
+make: "varmod-order.mk" line 58: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onr_typo"
+make: "varmod-order.mk" line 58: Malformed conditional (${NUMBERS:Onr_typo})
+make: "varmod-order.mk" line 68: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Orn_typo"
+make: "varmod-order.mk" line 68: Malformed conditional (${NUMBERS:Orn_typo})
+make: "varmod-order.mk" line 80: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onn"
+make: "varmod-order.mk" line 80: Malformed conditional (${NUMBERS:Onn})
+make: "varmod-order.mk" line 90: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onrr"
+make: "varmod-order.mk" line 90: Malformed conditional (${NUMBERS:Onrr})
+make: "varmod-order.mk" line 100: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Orrn"
+make: "varmod-order.mk" line 100: Malformed conditional (${NUMBERS:Orrn})
+make: "varmod-order.mk" line 115: while evaluating variable "SWITCH" with value "On": Bad modifier ":On=Off"
+make: "varmod-order.mk" line 115: Malformed conditional (${SWITCH:On=Off} != "Off")
make: Fatal errors encountered -- cannot continue
make: stopped making "all" in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/varmod-order.mk
diff -u src/usr.bin/make/unit-tests/varmod-order.mk:1.12 src/usr.bin/make/unit-tests/varmod-order.mk:1.13
--- src/usr.bin/make/unit-tests/varmod-order.mk:1.12 Thu Jul 4 18:53:37 2024
+++ src/usr.bin/make/unit-tests/varmod-order.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-order.mk,v 1.12 2024/07/04 18:53:37 rillig Exp $
+# $NetBSD: varmod-order.mk,v 1.13 2024/07/05 17:41:50 rillig Exp $
#
# Tests for the :O variable modifier and its variants, which either sort the
# words of the value or shuffle them.
@@ -23,8 +23,11 @@ _:= ${WORDS:OX}
_:= ${WORDS:OxXX}
# Missing closing brace, to cover the error handling code.
+# expect: make: Unclosed expression, expecting '}' for modifier "O" of variable "WORDS" with value "eight five four nine one seven six ten three two"
_:= ${WORDS:O
+# expect: make: Unclosed expression, expecting '}' for modifier "On" of variable "NUMBERS" with value "1 2 3 4 5 6 7 8 9 10"
_:= ${NUMBERS:On
+# expect: make: Unclosed expression, expecting '}' for modifier "Onr" of variable "NUMBERS" with value "10 9 8 7 6 5 4 3 2 1"
_:= ${NUMBERS:Onr
# Shuffling numerically doesn't make sense, so don't allow 'x' and 'n' to be
Index: src/usr.bin/make/unit-tests/varparse-errors.mk
diff -u src/usr.bin/make/unit-tests/varparse-errors.mk:1.14 src/usr.bin/make/unit-tests/varparse-errors.mk:1.15
--- src/usr.bin/make/unit-tests/varparse-errors.mk:1.14 Thu Jul 4 18:53:37 2024
+++ src/usr.bin/make/unit-tests/varparse-errors.mk Fri Jul 5 17:41:50 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varparse-errors.mk,v 1.14 2024/07/04 18:53:37 rillig Exp $
+# $NetBSD: varparse-errors.mk,v 1.15 2024/07/05 17:41:50 rillig Exp $
# Tests for parsing and evaluating all kinds of expressions.
#
@@ -79,17 +79,31 @@ _:= ${:U:OX:U${IND}} ${:U:OX:U${IND}}
# Before var.c 1.032 from 2022-08-24, make complained about 'Unknown modifier'
# or 'Bad modifier' when in fact the modifier was entirely correct, it was
# just not delimited by either ':' or '}' but instead by '\0'.
+# expect: make: Unclosed expression, expecting '}' for modifier "Q" of variable "" with value ""
UNCLOSED:= ${:U:Q
+# expect: make: Unclosed expression, expecting '}' for modifier "sh" of variable "" with value ""
UNCLOSED:= ${:U:sh
+# expect: make: Unclosed expression, expecting '}' for modifier "tA" of variable "" with value ""
UNCLOSED:= ${:U:tA
+# expect: make: Unclosed expression, expecting '}' for modifier "tsX" of variable "" with value ""
UNCLOSED:= ${:U:tsX
+# expect: make: Unclosed expression, expecting '}' for modifier "ts" of variable "" with value ""
UNCLOSED:= ${:U:ts
+# expect: make: Unclosed expression, expecting '}' for modifier "ts\040" of variable "" with value ""
UNCLOSED:= ${:U:ts\040
+# expect: make: Unclosed expression, expecting '}' for modifier "u" of variable "" with value ""
UNCLOSED:= ${:U:u
+# expect: make: Unclosed expression, expecting '}' for modifier "H" of variable "" with value "."
UNCLOSED:= ${:U:H
+# expect: make: Unclosed expression, expecting '}' for modifier "[1]" of variable "" with value ""
UNCLOSED:= ${:U:[1]
+# expect: make: Unclosed expression, expecting '}' for modifier "hash" of variable "" with value "b2af338b"
UNCLOSED:= ${:U:hash
+# expect: make: Unclosed expression, expecting '}' for modifier "range" of variable "" with value "1"
UNCLOSED:= ${:U:range
+# expect: make: Unclosed expression, expecting '}' for modifier "_" of variable "" with value ""
UNCLOSED:= ${:U:_
+# expect: make: Unclosed expression, expecting '}' for modifier "gmtime" of variable "" with value "<timestamp>"
UNCLOSED:= ${:U:gmtime
+# expect: make: Unclosed expression, expecting '}' for modifier "localtime" of variable "" with value "<timestamp>"
UNCLOSED:= ${:U:localtime