Module Name: src Committed By: rillig Date: Fri Jul 5 19:47:22 UTC 2024
Modified Files: src/usr.bin/make: var.c src/usr.bin/make/unit-tests: cond-token-string.exp cond-token-string.mk deptgt.exp deptgt.mk directive-for-errors.exp directive-for-errors.mk directive-for-escape.exp directive-for-escape.mk directive-for.exp directive-for.mk directive-include.exp directive-include.mk moderrs.exp moderrs.mk var-eval-short.exp var-eval-short.mk vardebug.exp vardebug.mk varmod-assign.exp varmod-edge.exp varmod-edge.mk varmod-gmtime.exp varmod-gmtime.mk varmod-ifelse.exp varmod-ifelse.mk varmod-localtime.exp varmod-localtime.mk varmod-loop-delete.exp varmod-loop-delete.mk varmod-loop-varname.exp varmod-loop-varname.mk varmod-match-escape.exp varmod-match-escape.mk varmod-range.exp varmod-range.mk varmod-shell.exp varmod-shell.mk varmod-subst-regex.exp varmod-subst.exp varmod-to-separator.exp varmod-to-separator.mk varmod.exp varmod.mk varparse-errors.exp varparse-errors.mk Log Message: make: in error messages for anonymous variables, log the value To generate a diff of this commit: cvs rdiff -u -r1.1131 -r1.1132 src/usr.bin/make/var.c cvs rdiff -u -r1.13 -r1.14 src/usr.bin/make/unit-tests/cond-token-string.exp \ src/usr.bin/make/unit-tests/directive-include.exp \ src/usr.bin/make/unit-tests/varparse-errors.exp cvs rdiff -u -r1.10 -r1.11 src/usr.bin/make/unit-tests/cond-token-string.mk \ src/usr.bin/make/unit-tests/vardebug.mk cvs rdiff -u -r1.14 -r1.15 src/usr.bin/make/unit-tests/deptgt.exp \ src/usr.bin/make/unit-tests/directive-include.mk \ src/usr.bin/make/unit-tests/varmod-range.exp \ src/usr.bin/make/unit-tests/varmod.exp cvs rdiff -u -r1.17 -r1.18 src/usr.bin/make/unit-tests/deptgt.mk \ src/usr.bin/make/unit-tests/varmod-to-separator.mk \ src/usr.bin/make/unit-tests/varmod.mk cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/directive-for-errors.exp \ src/usr.bin/make/unit-tests/varmod-loop-delete.exp cvs rdiff -u -r1.11 -r1.12 \ src/usr.bin/make/unit-tests/directive-for-errors.mk cvs rdiff -u -r1.27 -r1.28 \ src/usr.bin/make/unit-tests/directive-for-escape.exp \ src/usr.bin/make/unit-tests/var-eval-short.exp cvs rdiff -u -r1.25 -r1.26 \ src/usr.bin/make/unit-tests/directive-for-escape.mk \ src/usr.bin/make/unit-tests/directive-for.mk \ src/usr.bin/make/unit-tests/varmod-assign.exp cvs rdiff -u -r1.23 -r1.24 src/usr.bin/make/unit-tests/directive-for.exp \ src/usr.bin/make/unit-tests/varmod-gmtime.mk cvs rdiff -u -r1.40 -r1.41 src/usr.bin/make/unit-tests/moderrs.exp cvs rdiff -u -r1.37 -r1.38 src/usr.bin/make/unit-tests/moderrs.mk cvs rdiff -u -r1.12 -r1.13 src/usr.bin/make/unit-tests/var-eval-short.mk \ src/usr.bin/make/unit-tests/varmod-range.mk cvs rdiff -u -r1.35 -r1.36 src/usr.bin/make/unit-tests/vardebug.exp cvs rdiff -u -r1.22 -r1.23 src/usr.bin/make/unit-tests/varmod-edge.exp \ src/usr.bin/make/unit-tests/varmod-match-escape.exp cvs rdiff -u -r1.24 -r1.25 src/usr.bin/make/unit-tests/varmod-edge.mk cvs rdiff -u -r1.19 -r1.20 src/usr.bin/make/unit-tests/varmod-gmtime.exp cvs rdiff -u -r1.21 -r1.22 src/usr.bin/make/unit-tests/varmod-ifelse.exp cvs rdiff -u -r1.30 -r1.31 src/usr.bin/make/unit-tests/varmod-ifelse.mk cvs rdiff -u -r1.16 -r1.17 src/usr.bin/make/unit-tests/varmod-localtime.exp \ src/usr.bin/make/unit-tests/varmod-localtime.mk \ src/usr.bin/make/unit-tests/varparse-errors.mk cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/varmod-loop-delete.mk \ src/usr.bin/make/unit-tests/varmod-subst.exp cvs rdiff -u -r1.9 -r1.10 src/usr.bin/make/unit-tests/varmod-loop-varname.exp \ src/usr.bin/make/unit-tests/varmod-shell.mk \ src/usr.bin/make/unit-tests/varmod-subst-regex.exp cvs rdiff -u -r1.8 -r1.9 src/usr.bin/make/unit-tests/varmod-loop-varname.mk cvs rdiff -u -r1.15 -r1.16 src/usr.bin/make/unit-tests/varmod-match-escape.mk \ src/usr.bin/make/unit-tests/varmod-to-separator.exp cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/varmod-shell.exp 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/var.c diff -u src/usr.bin/make/var.c:1.1131 src/usr.bin/make/var.c:1.1132 --- src/usr.bin/make/var.c:1.1131 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/var.c Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.1131 2024/07/05 18:59:33 rillig Exp $ */ +/* $NetBSD: var.c,v 1.1132 2024/07/05 19:47:22 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -132,7 +132,7 @@ #include "metachar.h" /* "@(#)var.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: var.c,v 1.1131 2024/07/05 18:59:33 rillig Exp $"); +MAKE_RCSID("$NetBSD: var.c,v 1.1132 2024/07/05 19:47:22 rillig Exp $"); /* * Variables are defined using one of the VAR=value assignments. Their @@ -389,10 +389,12 @@ EvalStack_Details(void) "while evaluating", }; EvalStackElement *elem = evalStack.elems + i; - Buf_AddStr(buf, descr[elem->kind]); + EvalStackElementKind kind = elem->kind; + Buf_AddStr(buf, descr[kind]); Buf_AddStr(buf, " \""); Buf_AddStr(buf, elem->str); - if (elem->kind == VSK_VARNAME) { + if (elem->value != NULL + && (kind == VSK_VARNAME || kind == VSK_EXPR)) { Buf_AddStr(buf, "\" with value \""); Buf_AddStr(buf, elem->value->str); } @@ -4602,7 +4604,7 @@ Var_Parse(const char **pp, GNode *scope, if (expr.name[0] != '\0') EvalStack_Push(VSK_VARNAME, expr.name, &expr.value); else - EvalStack_Push(VSK_EXPR, start, NULL); + EvalStack_Push(VSK_EXPR, start, &expr.value); /* * Before applying any modifiers, expand any nested expressions from Index: src/usr.bin/make/unit-tests/cond-token-string.exp diff -u src/usr.bin/make/unit-tests/cond-token-string.exp:1.13 src/usr.bin/make/unit-tests/cond-token-string.exp:1.14 --- src/usr.bin/make/unit-tests/cond-token-string.exp:1.13 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/cond-token-string.exp Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -make: "cond-token-string.mk" line 15: while evaluating "${:Uvalue:Z}"": Unknown modifier "Z" +make: "cond-token-string.mk" line 15: while evaluating "${:Uvalue:Z}"" with value "value": Unknown modifier "Z" make: "cond-token-string.mk" line 15: Malformed conditional ("" != "${:Uvalue:Z}") make: "cond-token-string.mk" line 25: xvalue is not defined. make: "cond-token-string.mk" line 32: Malformed conditional (x${:Uvalue} == "") Index: src/usr.bin/make/unit-tests/directive-include.exp diff -u src/usr.bin/make/unit-tests/directive-include.exp:1.13 src/usr.bin/make/unit-tests/directive-include.exp:1.14 --- src/usr.bin/make/unit-tests/directive-include.exp:1.13 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/directive-include.exp Fri Jul 5 19:47:22 2024 @@ -4,7 +4,7 @@ CondParser_Eval: ${.MAKE.MAKEFILES:T} != Comparing "directive-include.mk null" != "directive-include.mk null" make: "directive-include.mk" line 26: Could not find nonexistent.mk make: "directive-include.mk" line 49: Could not find " -make: "directive-include.mk" line 56: while evaluating "${:U123:Z}.mk": Unknown modifier "Z" +make: "directive-include.mk" line 56: while evaluating "${:U123:Z}.mk" with value "123": Unknown modifier "Z" make: "directive-include.mk" line 56: Could not find nonexistent.mk make: "directive-include.mk" line 61: Cannot open /nonexistent make: "directive-include.mk" line 66: Invalid line 'include' Index: src/usr.bin/make/unit-tests/varparse-errors.exp diff -u src/usr.bin/make/unit-tests/varparse-errors.exp:1.13 src/usr.bin/make/unit-tests/varparse-errors.exp:1.14 --- src/usr.bin/make/unit-tests/varparse-errors.exp:1.13 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/varparse-errors.exp Fri Jul 5 19:47:22 2024 @@ -1,25 +1,25 @@ -make: "varparse-errors.mk" line 38: while evaluating "${:U:Z}": Unknown modifier "Z" -make: "varparse-errors.mk" line 47: while evaluating "${:U:Z}post": Unknown modifier "Z" -make: "varparse-errors.mk" line 75: while evaluating "${:U:OX:U${IND}} ${:U:OX:U${IND}}": Bad modifier ":OX" +make: "varparse-errors.mk" line 38: while evaluating "${:U:Z}" with value "": Unknown modifier "Z" +make: "varparse-errors.mk" line 47: while evaluating "${:U:Z}post" with value "": Unknown modifier "Z" +make: "varparse-errors.mk" line 75: while evaluating "${:U:OX:U${IND}} ${:U:OX:U${IND}}" with value "": Bad modifier ":OX" make: "varparse-errors.mk" line 75: Undefined variable "${:U:OX" -make: "varparse-errors.mk" line 75: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}": Bad modifier ":OX" -make: "varparse-errors.mk" line 75: while evaluating "${:U:OX:U${IND}}": Bad modifier ":OX" +make: "varparse-errors.mk" line 75: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}" with value "": Bad modifier ":OX" +make: "varparse-errors.mk" line 75: while evaluating "${:U:OX:U${IND}}" with value "": Bad modifier ":OX" make: "varparse-errors.mk" line 75: Undefined variable "${:U:OX" -make: "varparse-errors.mk" line 75: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}": Bad modifier ":OX" -make: "varparse-errors.mk" line 83: while evaluating "${:U:Q": Unclosed expression, expecting '}' for modifier "Q" -make: "varparse-errors.mk" line 85: while evaluating "${:U:sh": Unclosed expression, expecting '}' for modifier "sh" -make: "varparse-errors.mk" line 87: while evaluating "${:U:tA": Unclosed expression, expecting '}' for modifier "tA" -make: "varparse-errors.mk" line 89: while evaluating "${:U:tsX": Unclosed expression, expecting '}' for modifier "tsX" -make: "varparse-errors.mk" line 91: while evaluating "${:U:ts": Unclosed expression, expecting '}' for modifier "ts" -make: "varparse-errors.mk" line 93: while evaluating "${:U:ts\040": Unclosed expression, expecting '}' for modifier "ts\040" -make: "varparse-errors.mk" line 95: while evaluating "${:U:u": Unclosed expression, expecting '}' for modifier "u" -make: "varparse-errors.mk" line 97: while evaluating "${:U:H": Unclosed expression, expecting '}' for modifier "H" -make: "varparse-errors.mk" line 99: while evaluating "${:U:[1]": Unclosed expression, expecting '}' for modifier "[1]" -make: "varparse-errors.mk" line 101: while evaluating "${:U:hash": Unclosed expression, expecting '}' for modifier "hash" -make: "varparse-errors.mk" line 103: while evaluating "${:U:range": Unclosed expression, expecting '}' for modifier "range" -make: "varparse-errors.mk" line 105: while evaluating "${:U:_": Unclosed expression, expecting '}' for modifier "_" -make: "varparse-errors.mk" line 107: while evaluating "${:U:gmtime": Unclosed expression, expecting '}' for modifier "gmtime" -make: "varparse-errors.mk" line 109: while evaluating "${:U:localtime": Unclosed expression, expecting '}' for modifier "localtime" +make: "varparse-errors.mk" line 75: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}" with value "": Bad modifier ":OX" +make: "varparse-errors.mk" line 83: while evaluating "${:U:Q" with value "": Unclosed expression, expecting '}' for modifier "Q" +make: "varparse-errors.mk" line 85: while evaluating "${:U:sh" with value "": Unclosed expression, expecting '}' for modifier "sh" +make: "varparse-errors.mk" line 87: while evaluating "${:U:tA" with value "": Unclosed expression, expecting '}' for modifier "tA" +make: "varparse-errors.mk" line 89: while evaluating "${:U:tsX" with value "": Unclosed expression, expecting '}' for modifier "tsX" +make: "varparse-errors.mk" line 91: while evaluating "${:U:ts" with value "": Unclosed expression, expecting '}' for modifier "ts" +make: "varparse-errors.mk" line 93: while evaluating "${:U:ts\040" with value "": Unclosed expression, expecting '}' for modifier "ts\040" +make: "varparse-errors.mk" line 95: while evaluating "${:U:u" with value "": Unclosed expression, expecting '}' for modifier "u" +make: "varparse-errors.mk" line 97: while evaluating "${:U:H" with value ".": Unclosed expression, expecting '}' for modifier "H" +make: "varparse-errors.mk" line 99: while evaluating "${:U:[1]" with value "": Unclosed expression, expecting '}' for modifier "[1]" +make: "varparse-errors.mk" line 101: while evaluating "${:U:hash" with value "b2af338b": Unclosed expression, expecting '}' for modifier "hash" +make: "varparse-errors.mk" line 103: while evaluating "${:U:range" with value "1": Unclosed expression, expecting '}' for modifier "range" +make: "varparse-errors.mk" line 105: while evaluating "${:U:_" with value "": Unclosed expression, expecting '}' for modifier "_" +make: "varparse-errors.mk" line 107: while evaluating "${:U:gmtime" with value "<timestamp>": Unclosed expression, expecting '}' for modifier "gmtime" +make: "varparse-errors.mk" line 109: while evaluating "${:U:localtime" with value "<timestamp>": Unclosed expression, expecting '}' for modifier "localtime" make: Fatal errors encountered -- cannot continue make: stopped in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/cond-token-string.mk diff -u src/usr.bin/make/unit-tests/cond-token-string.mk:1.10 src/usr.bin/make/unit-tests/cond-token-string.mk:1.11 --- src/usr.bin/make/unit-tests/cond-token-string.mk:1.10 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/cond-token-string.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: cond-token-string.mk,v 1.10 2024/04/20 10:18:55 rillig Exp $ +# $NetBSD: cond-token-string.mk,v 1.11 2024/07/05 19:47:22 rillig Exp $ # # Tests for quoted string literals in .if conditions. # @@ -11,7 +11,7 @@ # Cover the code in CondParser_String that frees the memory after parsing # an expression based on an undefined variable. # expect+2: Malformed conditional ("" != "${:Uvalue:Z}") -# expect+1: while evaluating "${:Uvalue:Z}"": Unknown modifier "Z" +# expect+1: while evaluating "${:Uvalue:Z}"" with value "value": Unknown modifier "Z" .if "" != "${:Uvalue:Z}" . error .else Index: src/usr.bin/make/unit-tests/vardebug.mk diff -u src/usr.bin/make/unit-tests/vardebug.mk:1.10 src/usr.bin/make/unit-tests/vardebug.mk:1.11 --- src/usr.bin/make/unit-tests/vardebug.mk:1.10 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/vardebug.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: vardebug.mk,v 1.10 2024/04/20 10:18:55 rillig Exp $ +# $NetBSD: vardebug.mk,v 1.11 2024/07/05 19:47:22 rillig Exp $ # # Demonstrates the debugging output for var.c. @@ -59,7 +59,7 @@ VAR+= 3 # as "is error", without surrounding quotes. # expect: Result of ${:unknown} is error (eval-defined, defined) # expect+2: Malformed conditional (${:Uvariable:unknown}) -# expect+1: while evaluating "${:Uvariable:unknown}": Unknown modifier "unknown" +# expect+1: while evaluating "${:Uvariable:unknown}" with value "variable": Unknown modifier "unknown" .if ${:Uvariable:unknown} .endif Index: src/usr.bin/make/unit-tests/deptgt.exp diff -u src/usr.bin/make/unit-tests/deptgt.exp:1.14 src/usr.bin/make/unit-tests/deptgt.exp:1.15 --- src/usr.bin/make/unit-tests/deptgt.exp:1.14 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/deptgt.exp Fri Jul 5 19:47:22 2024 @@ -8,7 +8,7 @@ ParseDependency(: empty-source) Parsing line 39: : command for empty targets list Parsing line 40: .MAKEFLAGS: -d0 ParseDependency(.MAKEFLAGS: -d0) -make: "deptgt.mk" line 49: while evaluating "${:U:Z}:": Unknown modifier "Z" +make: "deptgt.mk" line 49: while evaluating "${:U:Z}:" with value "": Unknown modifier "Z" make: "deptgt.mk" line 52: warning: Extra target 'ordinary' ignored make: "deptgt.mk" line 55: warning: Extra target (ordinary) ignored make: "deptgt.mk" line 58: warning: Special and mundane targets don't mix. Mundane ones ignored Index: src/usr.bin/make/unit-tests/directive-include.mk diff -u src/usr.bin/make/unit-tests/directive-include.mk:1.14 src/usr.bin/make/unit-tests/directive-include.mk:1.15 --- src/usr.bin/make/unit-tests/directive-include.mk:1.14 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/directive-include.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: directive-include.mk,v 1.14 2024/04/20 10:18:55 rillig Exp $ +# $NetBSD: directive-include.mk,v 1.15 2024/07/05 19:47:22 rillig Exp $ # # Tests for the .include directive, which includes another file. @@ -52,7 +52,7 @@ DQUOT= " # expression is skipped and the file is included nevertheless. # FIXME: Add proper error handling, no file must be included here. # expect+2: Could not find nonexistent.mk -# expect+1: while evaluating "${:U123:Z}.mk": Unknown modifier "Z" +# expect+1: while evaluating "${:U123:Z}.mk" with value "123": Unknown modifier "Z" .include "nonexistent${:U123:Z}.mk" # The traditional include directive is seldom used. Index: src/usr.bin/make/unit-tests/varmod-range.exp diff -u src/usr.bin/make/unit-tests/varmod-range.exp:1.14 src/usr.bin/make/unit-tests/varmod-range.exp:1.15 --- src/usr.bin/make/unit-tests/varmod-range.exp:1.14 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/varmod-range.exp Fri Jul 5 19:47:22 2024 @@ -1,7 +1,7 @@ make: "varmod-range.mk" line 43: Malformed conditional (${:range=5} != "") -make: "varmod-range.mk" line 67: while evaluating "${:U:range=x}Rest" != "Rest"": Invalid number "x}Rest" != "Rest"" for ':range' modifier +make: "varmod-range.mk" line 67: while evaluating "${:U:range=x}Rest" != "Rest"" with value "": Invalid number "x}Rest" != "Rest"" for ':range' modifier make: "varmod-range.mk" line 67: Malformed conditional ("${:U:range=x}Rest" != "Rest") -make: "varmod-range.mk" line 78: while evaluating "${:U:range=0x0}Rest" != "Rest"": Unknown modifier "x0" +make: "varmod-range.mk" line 78: while evaluating "${:U:range=0x0}Rest" != "Rest"" with value "1": Unknown modifier "x0" make: "varmod-range.mk" line 78: Malformed conditional ("${:U:range=0x0}Rest" != "Rest") make: "varmod-range.mk" line 96: while evaluating variable "a b c" with value "a b c": Unknown modifier "rang" make: "varmod-range.mk" line 96: Malformed conditional ("${a b c:L:rang}Rest" != "Rest") Index: src/usr.bin/make/unit-tests/varmod.exp diff -u src/usr.bin/make/unit-tests/varmod.exp:1.14 src/usr.bin/make/unit-tests/varmod.exp:1.15 --- src/usr.bin/make/unit-tests/varmod.exp:1.14 Thu Jul 4 18:53:37 2024 +++ src/usr.bin/make/unit-tests/varmod.exp Fri Jul 5 19:47:22 2024 @@ -1,6 +1,6 @@ make: "varmod.mk" line 101: To escape a dollar, use \$, not $$, at "$$:L} != """ make: "varmod.mk" line 101: Invalid variable name ':', at "$:L} != """ -make: "varmod.mk" line 107: while evaluating "${:Uword:@word@${word}$@} != "word"": Dollar followed by nothing +make: "varmod.mk" line 107: while evaluating "${:Uword:@word@${word}$@} != "word"" with value "word": Dollar followed by nothing make: "varmod.mk" line 117: while evaluating variable "VAR" with value "VAR": Missing delimiter ':' after modifier "P" make: "varmod.mk" line 119: Missing argument for ".error" make: "varmod.mk" line 126: while evaluating variable "word" with value "word": Bad modifier ":[99333000222000111000]" @@ -9,7 +9,7 @@ make: "varmod.mk" line 130: while evalua make: "varmod.mk" line 130: Malformed conditional (${word:L:[2147483648]}) make: "varmod.mk" line 137: while evaluating variable "word" with value "word": Invalid number "99333000222000111000}" for ':range' modifier make: "varmod.mk" line 137: Malformed conditional (${word:L:range=99333000222000111000}) -make: "varmod.mk" line 145: while evaluating "${:${:Ugmtime=\\}}": Invalid time value "\" +make: "varmod.mk" line 145: while evaluating "${:${:Ugmtime=\\}}" with value "": Invalid time value "\" make: "varmod.mk" line 145: Malformed conditional (${:${:Ugmtime=\\}}) make: "varmod.mk" line 160: while evaluating variable "VAR" with value "value$": Dollar followed by nothing make: "varmod.mk" line 166: while evaluating variable "VAR" with value "value$": Dollar followed by nothing @@ -19,7 +19,7 @@ make: "varmod.mk" line 181: while evalua make: "varmod.mk" line 181: Malformed conditional (${word:[$]}) make: "varmod.mk" line 198: while evaluating variable "VAR" with value "value$ appended$": Dollar followed by nothing make: "varmod.mk" line 198: while evaluating variable "VAR" with value "value<space>appended": Invalid variable name '}', at "$} != "set"" -make: "varmod.mk" line 202: while evaluating "${:Ufallback$} != "fallback"": Invalid variable name '}', at "$} != "fallback"" +make: "varmod.mk" line 202: while evaluating "${:Ufallback$} != "fallback"" with value "": Invalid variable name '}', at "$} != "fallback"" make: "varmod.mk" line 207: while evaluating variable "%y" with value "%y": Invalid time value "1000$" make: "varmod.mk" line 207: Malformed conditional (${%y:L:gmtime=1000$}) make: "varmod.mk" line 214: while evaluating variable "%y" with value "%y": Invalid time value "1000$" Index: src/usr.bin/make/unit-tests/deptgt.mk diff -u src/usr.bin/make/unit-tests/deptgt.mk:1.17 src/usr.bin/make/unit-tests/deptgt.mk:1.18 --- src/usr.bin/make/unit-tests/deptgt.mk:1.17 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/deptgt.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: deptgt.mk,v 1.17 2024/04/20 10:18:55 rillig Exp $ +# $NetBSD: deptgt.mk,v 1.18 2024/07/05 19:47:22 rillig Exp $ # # Tests for special targets like .BEGIN or .SUFFIXES in dependency # declarations. @@ -45,7 +45,7 @@ ${:U}: empty-source # expansion would be to use the variable modifier '::=' to modify the # targets. This in turn would be such an extreme and unreliable edge case # that nobody uses it. -# expect+1: while evaluating "${:U:Z}:": Unknown modifier "Z" +# expect+1: while evaluating "${:U:Z}:" with value "": Unknown modifier "Z" $$$$$$$${:U:Z}: # expect+1: warning: Extra target 'ordinary' ignored Index: src/usr.bin/make/unit-tests/varmod-to-separator.mk diff -u src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.17 src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.18 --- src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.17 Thu Jul 4 18:53:37 2024 +++ src/usr.bin/make/unit-tests/varmod-to-separator.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-to-separator.mk,v 1.17 2024/07/04 18:53:37 rillig Exp $ +# $NetBSD: varmod-to-separator.mk,v 1.18 2024/07/05 19:47:22 rillig Exp $ # # Tests for the :ts variable modifier, which joins the words of the variable # using an arbitrary character as word separator. @@ -262,7 +262,7 @@ WORDS= one two three four five six # happens for non-octal digits. From 2003.07.23.18.06.46 to # 2016.02.27.16.20.06, the result was '1E2', since 2016.03.07.20.20.35 make no # longer accepts this escape and complains. -# expect+2: while evaluating "${:Ua b:ts\69}": Bad modifier ":ts\69" +# expect+2: while evaluating "${:Ua b:ts\69}" with value "a b": Bad modifier ":ts\69" # expect+1: Malformed conditional (${:Ua b:ts\69}) .if ${:Ua b:ts\69} . error @@ -271,7 +271,7 @@ WORDS= one two three four five six .endif # Try whether bmake is Unicode-ready. -# expect+2: while evaluating "${:Ua b:ts\x1F60E}": Invalid character number at "1F60E}" +# expect+2: while evaluating "${:Ua b:ts\x1F60E}" with value "a b": Invalid character number at "1F60E}" # expect+1: Malformed conditional (${:Ua b:ts\x1F60E}) .if ${:Ua b:ts\x1F60E} # U+1F60E "smiling face with sunglasses" . error Index: src/usr.bin/make/unit-tests/varmod.mk diff -u src/usr.bin/make/unit-tests/varmod.mk:1.17 src/usr.bin/make/unit-tests/varmod.mk:1.18 --- src/usr.bin/make/unit-tests/varmod.mk:1.17 Thu Jul 4 18:53:37 2024 +++ src/usr.bin/make/unit-tests/varmod.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod.mk,v 1.17 2024/07/04 18:53:37 rillig Exp $ +# $NetBSD: varmod.mk,v 1.18 2024/07/05 19:47:22 rillig Exp $ # # Tests for variable modifiers, such as :Q, :S,from,to or :Ufallback. # @@ -103,7 +103,7 @@ DOLLAR2= ${:U\$} .endif # A '$' followed by nothing is an error as well. -# expect+1: while evaluating "${:Uword:@word@${word}$@} != "word"": Dollar followed by nothing +# expect+1: while evaluating "${:Uword:@word@${word}$@} != "word"" with value "word": Dollar followed by nothing .if ${:Uword:@word@${word}$@} != "word" . error .endif @@ -140,7 +140,7 @@ VAR= STOP # In an indirect modifier, the delimiter is '\0', which at the same time marks # the end of the string. The sequence '\\' '\0' is not an escaped delimiter, # as it would be wrong to skip past the end of the string. -# expect+2: while evaluating "${:${:Ugmtime=\\}}": Invalid time value "\" +# expect+2: while evaluating "${:${:Ugmtime=\\}}" with value "": Invalid time value "\" # expect+1: Malformed conditional (${:${:Ugmtime=\\}}) .if ${:${:Ugmtime=\\}} . error @@ -198,7 +198,7 @@ VAR_DOLLAR= VAR$$ .if ${VAR:Dset$} != "set" . error .endif -# expect+1: while evaluating "${:Ufallback$} != "fallback"": Invalid variable name '}', at "$} != "fallback"" +# expect+1: while evaluating "${:Ufallback$} != "fallback"" with value "": Invalid variable name '}', at "$} != "fallback"" .if ${:Ufallback$} != "fallback" . error .endif Index: src/usr.bin/make/unit-tests/directive-for-errors.exp diff -u src/usr.bin/make/unit-tests/directive-for-errors.exp:1.6 src/usr.bin/make/unit-tests/directive-for-errors.exp:1.7 --- src/usr.bin/make/unit-tests/directive-for-errors.exp:1.6 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/directive-for-errors.exp Fri Jul 5 19:47:22 2024 @@ -8,7 +8,7 @@ make: "directive-for-errors.mk" line 44: make: "directive-for-errors.mk" line 52: no iteration variables in for make: "directive-for-errors.mk" line 64: Wrong number of words (5) in .for substitution list with 3 variables make: "directive-for-errors.mk" line 78: missing `in' in for -make: "directive-for-errors.mk" line 89: while evaluating "${:U3:Z} 4": Unknown modifier "Z" +make: "directive-for-errors.mk" line 89: while evaluating "${:U3:Z} 4" with value "3": Unknown modifier "Z" make: "directive-for-errors.mk" line 90: warning: Should not be reached. make: "directive-for-errors.mk" line 90: warning: Should not be reached. make: "directive-for-errors.mk" line 90: warning: Should not be reached. Index: src/usr.bin/make/unit-tests/varmod-loop-delete.exp diff -u src/usr.bin/make/unit-tests/varmod-loop-delete.exp:1.6 src/usr.bin/make/unit-tests/varmod-loop-delete.exp:1.7 --- src/usr.bin/make/unit-tests/varmod-loop-delete.exp:1.6 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/varmod-loop-delete.exp Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -make: "varmod-loop-delete.mk" line 20: while evaluating variable "VAR" with value "${:U:@VAR@@} rest of the value": while evaluating "${:U:@VAR@@} rest of the value": Cannot delete variable "VAR" while it is used +make: "varmod-loop-delete.mk" line 20: while evaluating variable "VAR" with value "${:U:@VAR@@} rest of the value": while evaluating "${:U:@VAR@@} rest of the value" with value "": Cannot delete variable "VAR" while it is used make: Fatal errors encountered -- cannot continue make: stopped making "all" in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/directive-for-errors.mk diff -u src/usr.bin/make/unit-tests/directive-for-errors.mk:1.11 src/usr.bin/make/unit-tests/directive-for-errors.mk:1.12 --- src/usr.bin/make/unit-tests/directive-for-errors.mk:1.11 Sat Jun 1 11:24:11 2024 +++ src/usr.bin/make/unit-tests/directive-for-errors.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: directive-for-errors.mk,v 1.11 2024/06/01 11:24:11 rillig Exp $ +# $NetBSD: directive-for-errors.mk,v 1.12 2024/07/05 19:47:22 rillig Exp $ # # Tests for error handling in .for loops. @@ -85,7 +85,7 @@ ${:U\\}= backslash # see whether the "va # # XXX: As of 2020-12-31, Var_Subst doesn't report any errors, therefore # the loop body is expanded as if no error had happened. -# expect+1: while evaluating "${:U3:Z} 4": Unknown modifier "Z" +# expect+1: while evaluating "${:U3:Z} 4" with value "3": Unknown modifier "Z" .for i in 1 2 ${:U3:Z} 4 . warning Should not be reached. .endfor Index: src/usr.bin/make/unit-tests/directive-for-escape.exp diff -u src/usr.bin/make/unit-tests/directive-for-escape.exp:1.27 src/usr.bin/make/unit-tests/directive-for-escape.exp:1.28 --- src/usr.bin/make/unit-tests/directive-for-escape.exp:1.27 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/directive-for-escape.exp Fri Jul 5 19:47:22 2024 @@ -1,17 +1,17 @@ For: end for 1 For: loop body with chars = !"#$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~: -# expect+2: while evaluating "${:U!"": Unclosed expression, expecting '}' for modifier "U!"" +# expect+2: while evaluating "${:U!"" with value "!"": Unclosed expression, expecting '}' for modifier "U!"" # expect+1: !" . info ${:U!"#$%&'()*+,-./0-9\:;<=>?@A-Z[\\]_^a-z{|\}~} -make: "directive-for-escape.mk" line 21: while evaluating "${:U!"": Unclosed expression, expecting '}' for modifier "U!"" +make: "directive-for-escape.mk" line 21: while evaluating "${:U!"" with value "!"": Unclosed expression, expecting '}' for modifier "U!"" in .for loop from directive-for-escape.mk:18 with chars = !"#$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~ make: "directive-for-escape.mk" line 21: !" For: end for 1 For: loop body with chars = !"\\#$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~: -# expect+2: while evaluating "${:U!"\\\\": Unclosed expression, expecting '}' for modifier "U!"\\\\" +# expect+2: while evaluating "${:U!"\\\\" with value "!"\\": Unclosed expression, expecting '}' for modifier "U!"\\\\" # expect+1: !"\\ . info ${:U!"\\\\#$%&'()*+,-./0-9\:;<=>?@A-Z[\\]_^a-z{|\}~} -make: "directive-for-escape.mk" line 33: while evaluating "${:U!"\\\\": Unclosed expression, expecting '}' for modifier "U!"\\\\" +make: "directive-for-escape.mk" line 33: while evaluating "${:U!"\\\\" with value "!"\\": Unclosed expression, expecting '}' for modifier "U!"\\\\" in .for loop from directive-for-escape.mk:30 with chars = !"\\#$%&'()*+,-./0-9:;<=>?@A-Z[\]_^a-z{|}~ make: "directive-for-escape.mk" line 33: !"\\ For: end for 1 Index: src/usr.bin/make/unit-tests/var-eval-short.exp diff -u src/usr.bin/make/unit-tests/var-eval-short.exp:1.27 src/usr.bin/make/unit-tests/var-eval-short.exp:1.28 --- src/usr.bin/make/unit-tests/var-eval-short.exp:1.27 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/var-eval-short.exp Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -make: "var-eval-short.mk" line 46: while evaluating "${:Uword:@${FAIL}@expr@}": In the :@ modifier, the variable name "${FAIL}" must not contain a dollar +make: "var-eval-short.mk" line 46: while evaluating "${:Uword:@${FAIL}@expr@}" with value "": In the :@ modifier, the variable name "${FAIL}" must not contain a dollar make: "var-eval-short.mk" line 46: Malformed conditional (0 && ${:Uword:@${FAIL}@expr@}) Parsing line 159: .if 0 && ${0:?${FAIL}then:${FAIL}else} CondParser_Eval: 0 && ${0:?${FAIL}then:${FAIL}else} Index: src/usr.bin/make/unit-tests/directive-for-escape.mk diff -u src/usr.bin/make/unit-tests/directive-for-escape.mk:1.25 src/usr.bin/make/unit-tests/directive-for-escape.mk:1.26 --- src/usr.bin/make/unit-tests/directive-for-escape.mk:1.25 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/directive-for-escape.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: directive-for-escape.mk,v 1.25 2024/07/05 18:59:33 rillig Exp $ +# $NetBSD: directive-for-escape.mk,v 1.26 2024/07/05 19:47:22 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,7 +16,7 @@ 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+2: while evaluating "${:U!"": Unclosed expression, expecting '}' for modifier "U!"" +# expect+2: while evaluating "${:U!"" with value "!"": Unclosed expression, expecting '}' for modifier "U!"" # expect+1: !" . info ${chars} .endfor @@ -28,7 +28,7 @@ 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+2: while evaluating "${:U!"\\\\": Unclosed expression, expecting '}' for modifier "U!"\\\\" +# expect+2: while evaluating "${:U!"\\\\" with value "!"\\": Unclosed expression, expecting '}' for modifier "U!"\\\\" # expect+1: !"\\ . info ${chars} .endfor Index: src/usr.bin/make/unit-tests/directive-for.mk diff -u src/usr.bin/make/unit-tests/directive-for.mk:1.25 src/usr.bin/make/unit-tests/directive-for.mk:1.26 --- src/usr.bin/make/unit-tests/directive-for.mk:1.25 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/directive-for.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: directive-for.mk,v 1.25 2024/04/20 10:18:55 rillig Exp $ +# $NetBSD: directive-for.mk,v 1.26 2024/07/05 19:47:22 rillig Exp $ # # Tests for the .for directive. # @@ -206,7 +206,7 @@ INDIRECT= ${DIRECT} # XXX: A parse error or evaluation error in the items of the .for loop # should skip the whole loop. As of 2023-05-09, the loop is expanded as # usual. -# expect+1: while evaluating "${:Uword2:Z}-after word3": Unknown modifier "Z" +# expect+1: while evaluating "${:Uword2:Z}-after word3" with value "word2": Unknown modifier "Z" .for var in word1 before-${:Uword2:Z}-after word3 . info XXX: Should not reach ${var} .endfor Index: src/usr.bin/make/unit-tests/varmod-assign.exp diff -u src/usr.bin/make/unit-tests/varmod-assign.exp:1.25 src/usr.bin/make/unit-tests/varmod-assign.exp:1.26 --- src/usr.bin/make/unit-tests/varmod-assign.exp:1.25 Thu Jul 4 18:53:37 2024 +++ src/usr.bin/make/unit-tests/varmod-assign.exp Fri Jul 5 19:47:22 2024 @@ -37,9 +37,9 @@ Global: .MAKEOVERRIDES = FIRST LAST LAS Result of ${CMD_NEW_VAR::=new-value} is "" (eval, undefined) Global: .MAKEFLAGS = -r -k -d v -d 0 -d v -d Global: .MAKEFLAGS = -r -k -d v -d 0 -d v -d 0 -make: in target "mod-assign-empty": while evaluating "${::=value}": Bad modifier ":" +make: in target "mod-assign-empty": while evaluating "${::=value}" with value "": Bad modifier ":" mod-assign-empty: value} -make: in target "mod-assign-empty": while evaluating "${:Uvalue::=overwritten}": Bad modifier ":" +make: in target "mod-assign-empty": while evaluating "${:Uvalue::=overwritten}" with value "value": Bad modifier ":" mod-assign-empty: overwritten} mod-assign-empty: VAR=overwritten make: in target "mod-assign-parse": while evaluating variable "ASSIGN" with value "": Unknown modifier ":x" Index: src/usr.bin/make/unit-tests/directive-for.exp diff -u src/usr.bin/make/unit-tests/directive-for.exp:1.23 src/usr.bin/make/unit-tests/directive-for.exp:1.24 --- src/usr.bin/make/unit-tests/directive-for.exp:1.23 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/directive-for.exp Fri Jul 5 19:47:22 2024 @@ -17,7 +17,7 @@ make: "directive-for.mk" line 146: }{ }{ make: "directive-for.mk" line 166: invalid character ':' in .for loop variable name make: "directive-for.mk" line 173: invalid character '$' in .for loop variable name make: "directive-for.mk" line 185: invalid character '$' in .for loop variable name -make: "directive-for.mk" line 210: while evaluating "${:Uword2:Z}-after word3": Unknown modifier "Z" +make: "directive-for.mk" line 210: while evaluating "${:Uword2:Z}-after word3" with value "word2": Unknown modifier "Z" make: "directive-for.mk" line 211: XXX: Should not reach word1 make: "directive-for.mk" line 211: XXX: Should not reach before--after make: "directive-for.mk" line 211: XXX: Should not reach word3 Index: src/usr.bin/make/unit-tests/varmod-gmtime.mk diff -u src/usr.bin/make/unit-tests/varmod-gmtime.mk:1.23 src/usr.bin/make/unit-tests/varmod-gmtime.mk:1.24 --- src/usr.bin/make/unit-tests/varmod-gmtime.mk:1.23 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-gmtime.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-gmtime.mk,v 1.23 2024/07/04 17:47:54 rillig Exp $ +# $NetBSD: varmod-gmtime.mk,v 1.24 2024/07/05 19:47:22 rillig Exp $ # # Tests for the :gmtime variable modifier, which formats a timestamp # using strftime(3) in UTC. @@ -56,7 +56,7 @@ # 1970. Going back 50 years in the past is not a practical use case for # make. Therefore, since var.c 1.631, negative time stamps produce a # parse error. -# expect+2: while evaluating "${:L:gmtime=-1} != """: Invalid time value "-1" +# expect+2: while evaluating "${:L:gmtime=-1} != """ with value "": Invalid time value "-1" # expect+1: Malformed conditional (${:L:gmtime=-1} != "") .if ${:L:gmtime=-1} != "" . error @@ -67,7 +67,7 @@ # Spaces were allowed before var.c 1.631 from 2020-10-31 21:40:20, not # because it would make sense but just as a side-effect from using strtoul. -# expect+2: while evaluating "${:L:gmtime= 1} != """: Invalid time value " 1" +# expect+2: while evaluating "${:L:gmtime= 1} != """ with value "": Invalid time value " 1" # expect+1: Malformed conditional (${:L:gmtime= 1} != "") .if ${:L:gmtime= 1} != "" . error @@ -115,7 +115,7 @@ # # Since var.c 1.631 from 2020-10-31, the overflow is detected and produces a # parse error. -# expect+2: while evaluating "${:L:gmtime=10000000000000000000000000000000} != """: Invalid time value "10000000000000000000000000000000" +# expect+2: while evaluating "${:L:gmtime=10000000000000000000000000000000} != """ with value "": Invalid time value "10000000000000000000000000000000" # expect+1: Malformed conditional (${:L:gmtime=10000000000000000000000000000000} != "") .if ${:L:gmtime=10000000000000000000000000000000} != "" . error @@ -128,7 +128,7 @@ # stopped after the '=', and the remaining string was parsed for more variable # modifiers. Because of the unknown modifier 'e' from the 'error', the whole # variable value was discarded and thus not printed. -# expect+2: while evaluating "${:L:gmtime=error} != """: Invalid time value "error" +# expect+2: while evaluating "${:L:gmtime=error} != """ with value "": Invalid time value "error" # expect+1: Malformed conditional (${:L:gmtime=error} != "") .if ${:L:gmtime=error} != "" . error Index: src/usr.bin/make/unit-tests/moderrs.exp diff -u src/usr.bin/make/unit-tests/moderrs.exp:1.40 src/usr.bin/make/unit-tests/moderrs.exp:1.41 --- src/usr.bin/make/unit-tests/moderrs.exp:1.40 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/moderrs.exp Fri Jul 5 19:47:22 2024 @@ -72,7 +72,7 @@ mod-ts-parse: 15152535558513521534 make: in target "mod-ts-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Bad modifier ":ts\65oct" 65oct} -make: in target "mod-ts-parse": while evaluating "${:U${FIB}:ts\65oct} # bad modifier, variable name is """: Bad modifier ":ts\65oct" +make: in target "mod-ts-parse": while evaluating "${:U${FIB}:ts\65oct} # bad modifier, variable name is """ with value "1 1 2 3 5 8 13 21 34": Bad modifier ":ts\65oct" 65oct} make: in target "mod-ts-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Bad modifier ":tsxy" xy} Index: src/usr.bin/make/unit-tests/moderrs.mk diff -u src/usr.bin/make/unit-tests/moderrs.mk:1.37 src/usr.bin/make/unit-tests/moderrs.mk:1.38 --- src/usr.bin/make/unit-tests/moderrs.mk:1.37 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/moderrs.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: moderrs.mk,v 1.37 2024/07/05 18:59:33 rillig Exp $ +# $NetBSD: moderrs.mk,v 1.38 2024/07/05 19:47:22 rillig Exp $ # # various modifier error tests @@ -135,7 +135,7 @@ mod-ts-parse: print-header print-footer @echo ${FIB:ts\65} # octal 065 == U+0035 == '5' # expect: make: in target "mod-ts-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Bad modifier ":ts\65oct" @echo ${FIB:ts\65oct} # bad modifier -# expect: make: in target "mod-ts-parse": while evaluating "${:U${FIB}:ts\65oct} # bad modifier, variable name is """: Bad modifier ":ts\65oct" +# expect: make: in target "mod-ts-parse": while evaluating "${:U${FIB}:ts\65oct} # bad modifier, variable name is """ with value "1 1 2 3 5 8 13 21 34": Bad modifier ":ts\65oct" @echo ${:U${FIB}:ts\65oct} # bad modifier, variable name is "" # expect: make: in target "mod-ts-parse": while evaluating variable "FIB" with value "1 1 2 3 5 8 13 21 34": Bad modifier ":tsxy" @echo ${FIB:tsxy} # modifier too long Index: src/usr.bin/make/unit-tests/var-eval-short.mk diff -u src/usr.bin/make/unit-tests/var-eval-short.mk:1.12 src/usr.bin/make/unit-tests/var-eval-short.mk:1.13 --- src/usr.bin/make/unit-tests/var-eval-short.mk:1.12 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/var-eval-short.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: var-eval-short.mk,v 1.12 2024/04/20 10:18:55 rillig Exp $ +# $NetBSD: var-eval-short.mk,v 1.13 2024/07/05 19:47:22 rillig Exp $ # # Tests for each variable modifier to ensure that they only do the minimum # necessary computations. If the result of the expression is irrelevant, @@ -41,7 +41,7 @@ FAIL= ${:!echo unexpected 1>&2!} # after the loop, when undefining the temporary global loop variable. # Since var.c 1.907 from 2021-04-04, a '$' is no longer allowed in the # variable name. -# expect+2: while evaluating "${:Uword:@${FAIL}@expr@}": In the :@ modifier, the variable name "${FAIL}" must not contain a dollar +# expect+2: while evaluating "${:Uword:@${FAIL}@expr@}" with value "": In the :@ modifier, the variable name "${FAIL}" must not contain a dollar # expect+1: Malformed conditional (0 && ${:Uword:@${FAIL}@expr@}) .if 0 && ${:Uword:@${FAIL}@expr@} .endif Index: src/usr.bin/make/unit-tests/varmod-range.mk diff -u src/usr.bin/make/unit-tests/varmod-range.mk:1.12 src/usr.bin/make/unit-tests/varmod-range.mk:1.13 --- src/usr.bin/make/unit-tests/varmod-range.mk:1.12 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-range.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-range.mk,v 1.12 2024/07/04 17:47:54 rillig Exp $ +# $NetBSD: varmod-range.mk,v 1.13 2024/07/05 19:47:22 rillig Exp $ # # Tests for the :range variable modifier, which generates sequences # of integers from the given range. @@ -62,7 +62,7 @@ # # Since 2020-11-01, the parser issues a more precise "Invalid number" error # instead. -# expect+2: while evaluating "${:U:range=x}Rest" != "Rest"": Invalid number "x}Rest" != "Rest"" for ':range' modifier +# expect+2: while evaluating "${:U:range=x}Rest" != "Rest"" with value "": Invalid number "x}Rest" != "Rest"" for ':range' modifier # expect+1: Malformed conditional ("${:U:range=x}Rest" != "Rest") .if "${:U:range=x}Rest" != "Rest" . error @@ -73,7 +73,7 @@ # The upper limit of the range must always be given in decimal. # This parse error stops at the 'x', trying to parse it as a variable # modifier. -# expect+2: while evaluating "${:U:range=0x0}Rest" != "Rest"": Unknown modifier "x0" +# expect+2: while evaluating "${:U:range=0x0}Rest" != "Rest"" with value "1": Unknown modifier "x0" # expect+1: Malformed conditional ("${:U:range=0x0}Rest" != "Rest") .if "${:U:range=0x0}Rest" != "Rest" . error Index: src/usr.bin/make/unit-tests/vardebug.exp diff -u src/usr.bin/make/unit-tests/vardebug.exp:1.35 src/usr.bin/make/unit-tests/vardebug.exp:1.36 --- src/usr.bin/make/unit-tests/vardebug.exp:1.35 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/vardebug.exp Fri Jul 5 19:47:22 2024 @@ -54,7 +54,7 @@ Var_Parse: ${:Uvariable:unknown} (eval-d Evaluating modifier ${:U...} on value "" (eval-defined, undefined) Result of ${:Uvariable} is "variable" (eval-defined, defined) Evaluating modifier ${:u...} on value "variable" (eval-defined, defined) -make: "vardebug.mk" line 63: while evaluating "${:Uvariable:unknown}": Unknown modifier "unknown" +make: "vardebug.mk" line 63: while evaluating "${:Uvariable:unknown}" with value "variable": Unknown modifier "unknown" Result of ${:unknown} is error (eval-defined, defined) make: "vardebug.mk" line 63: Malformed conditional (${:Uvariable:unknown}) Var_Parse: ${UNDEFINED} (eval-defined) Index: src/usr.bin/make/unit-tests/varmod-edge.exp diff -u src/usr.bin/make/unit-tests/varmod-edge.exp:1.22 src/usr.bin/make/unit-tests/varmod-edge.exp:1.23 --- src/usr.bin/make/unit-tests/varmod-edge.exp:1.22 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/varmod-edge.exp Fri Jul 5 19:47:22 2024 @@ -1,7 +1,7 @@ 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: "varmod-edge.mk" line 168: while evaluating variable "MOD.M-nest-mix" with value "${INP.M-nest-mix:M${:U*)}}": while evaluating variable "INP.M-nest-mix" with value "(parentheses)": while evaluating "${:U*)": Unclosed expression, expecting '}' for modifier "U*)" +make: "varmod-edge.mk" line 168: while evaluating variable "MOD.M-nest-mix" with value "${INP.M-nest-mix:M${:U*)}}": while evaluating variable "INP.M-nest-mix" with value "(parentheses)": while evaluating "${:U*)" with value "*)": Unclosed expression, expecting '}' for modifier "U*)" in .for loop from varmod-edge.mk:164 with test = M-nest-mix make: "varmod-edge.mk" line 186: ok M-nest-mix make: "varmod-edge.mk" line 186: ok M-nest-brk @@ -22,9 +22,9 @@ make: "varmod-edge.mk" line 168: while e 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 186: ok colons -make: "varmod-edge.mk" line 197: while evaluating "${:Z}": Unknown modifier "Z" +make: "varmod-edge.mk" line 197: while evaluating "${:Z}" with value "": 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: while evaluating "${:S,}" with value "": 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 Index: src/usr.bin/make/unit-tests/varmod-match-escape.exp diff -u src/usr.bin/make/unit-tests/varmod-match-escape.exp:1.22 src/usr.bin/make/unit-tests/varmod-match-escape.exp:1.23 --- src/usr.bin/make/unit-tests/varmod-match-escape.exp:1.22 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/varmod-match-escape.exp Fri Jul 5 19:47:22 2024 @@ -33,7 +33,7 @@ Comparing ":" != "::" make: "varmod-match-escape.mk" line 43: warning: XXX: Oops Global: .MAKEFLAGS = -r -k -d cv -d Global: .MAKEFLAGS = -r -k -d cv -d 0 -make: "varmod-match-escape.mk" line 69: while evaluating "${:U\$:M\$} != """: Dollar followed by nothing +make: "varmod-match-escape.mk" line 69: while evaluating "${:U\$:M\$} != """ with value "$": Dollar followed by nothing make: "varmod-match-escape.mk" line 110: warning: while evaluating variable "WORDS" with value "A A] A]] B B] B]] ] ]] ]]] a a] a]]": Unfinished character list in pattern '[A-]' of modifier ':M' make: "varmod-match-escape.mk" line 110: warning: while evaluating variable "WORDS" with value "A A] A]] B B] B]] ] ]] ]]] a a] a]]": Unfinished character list in pattern '[^A-]' of modifier ':M' make: Fatal errors encountered -- cannot continue Index: src/usr.bin/make/unit-tests/varmod-edge.mk diff -u src/usr.bin/make/unit-tests/varmod-edge.mk:1.24 src/usr.bin/make/unit-tests/varmod-edge.mk:1.25 --- src/usr.bin/make/unit-tests/varmod-edge.mk:1.24 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/varmod-edge.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-edge.mk,v 1.24 2024/07/05 18:59:33 rillig Exp $ +# $NetBSD: varmod-edge.mk,v 1.25 2024/07/05 19:47:22 rillig Exp $ # # Tests for edge cases in variable modifiers. # @@ -169,7 +169,7 @@ EXP.colons= # empty # expect+17: ok M-paren # expect+16: ok M-mixed # expect+15: ok M-unescape -# expect-4: while evaluating variable "MOD.M-nest-mix" with value "${INP.M-nest-mix:M${:U*)}}": while evaluating variable "INP.M-nest-mix" with value "(parentheses)": while evaluating "${:U*)": Unclosed expression, expecting '}' for modifier "U*)" +# expect-4: while evaluating variable "MOD.M-nest-mix" with value "${INP.M-nest-mix:M${:U*)}}": while evaluating variable "INP.M-nest-mix" with value "(parentheses)": while evaluating "${:U*)" with value "*)": Unclosed expression, expecting '}' for modifier "U*)" # expect+13: ok M-nest-mix # expect+12: ok M-nest-brk # expect+11: ok M-pat-err @@ -193,7 +193,7 @@ EXP.colons= # empty # XXX: The error message should mention the variable name of the expression, # even though that name is empty in this case. # expect+2: Malformed conditional (${:Z}) -# expect+1: while evaluating "${:Z}": Unknown modifier "Z" +# expect+1: while evaluating "${:Z}" with value "": Unknown modifier "Z" .if ${:Z} . error .else @@ -206,7 +206,7 @@ EXP.colons= # empty # variable name with quotes, leading to the rather confusing "Unfinished # modifier for (',' missing)", having two spaces in a row. # -# expect+2: while evaluating "${:S,}": Unfinished modifier (',' missing) +# expect+2: while evaluating "${:S,}" with value "": Unfinished modifier (',' missing) # expect+1: Malformed conditional (${:S,}) .if ${:S,} . error Index: src/usr.bin/make/unit-tests/varmod-gmtime.exp diff -u src/usr.bin/make/unit-tests/varmod-gmtime.exp:1.19 src/usr.bin/make/unit-tests/varmod-gmtime.exp:1.20 --- src/usr.bin/make/unit-tests/varmod-gmtime.exp:1.19 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/varmod-gmtime.exp Fri Jul 5 19:47:22 2024 @@ -1,10 +1,10 @@ -make: "varmod-gmtime.mk" line 61: while evaluating "${:L:gmtime=-1} != """: Invalid time value "-1" +make: "varmod-gmtime.mk" line 61: while evaluating "${:L:gmtime=-1} != """ with value "": Invalid time value "-1" make: "varmod-gmtime.mk" line 61: Malformed conditional (${:L:gmtime=-1} != "") -make: "varmod-gmtime.mk" line 72: while evaluating "${:L:gmtime= 1} != """: Invalid time value " 1" +make: "varmod-gmtime.mk" line 72: while evaluating "${:L:gmtime= 1} != """ with value "": Invalid time value " 1" make: "varmod-gmtime.mk" line 72: Malformed conditional (${:L:gmtime= 1} != "") -make: "varmod-gmtime.mk" line 120: while evaluating "${:L:gmtime=10000000000000000000000000000000} != """: Invalid time value "10000000000000000000000000000000" +make: "varmod-gmtime.mk" line 120: while evaluating "${:L:gmtime=10000000000000000000000000000000} != """ with value "": Invalid time value "10000000000000000000000000000000" make: "varmod-gmtime.mk" line 120: Malformed conditional (${:L:gmtime=10000000000000000000000000000000} != "") -make: "varmod-gmtime.mk" line 133: while evaluating "${:L:gmtime=error} != """: Invalid time value "error" +make: "varmod-gmtime.mk" line 133: while evaluating "${:L:gmtime=error} != """ with value "": Invalid time value "error" make: "varmod-gmtime.mk" line 133: Malformed conditional (${:L:gmtime=error} != "") make: "varmod-gmtime.mk" line 144: while evaluating variable "%Y" with value "%Y": Invalid time value "100000S,1970,bad," make: "varmod-gmtime.mk" line 144: Malformed conditional (${%Y:L:gmtime=100000S,1970,bad,} != "bad") Index: src/usr.bin/make/unit-tests/varmod-ifelse.exp diff -u src/usr.bin/make/unit-tests/varmod-ifelse.exp:1.21 src/usr.bin/make/unit-tests/varmod-ifelse.exp:1.22 --- src/usr.bin/make/unit-tests/varmod-ifelse.exp:1.21 Sun Jun 30 13:01:01 2024 +++ src/usr.bin/make/unit-tests/varmod-ifelse.exp Fri Jul 5 19:47:22 2024 @@ -46,8 +46,8 @@ make: "varmod-ifelse.mk" line 293: no CondParser_Eval: ${DELAYED} == "two" Comparing "two" == "two" make: "varmod-ifelse.mk" line 296: yes -make: "varmod-ifelse.mk" line 318: while evaluating then-branch of condition "1": while evaluating "${:X-then}:${:X-else}}": Unknown modifier "X-then" -make: "varmod-ifelse.mk" line 318: while evaluating else-branch of condition "1": while evaluating "${:X-else}}": Unknown modifier "X-else" +make: "varmod-ifelse.mk" line 318: while evaluating then-branch of condition "1": while evaluating "${:X-then}:${:X-else}}" with value "": Unknown modifier "X-then" +make: "varmod-ifelse.mk" line 318: while evaluating else-branch of condition "1": while evaluating "${:X-else}}" with value "": Unknown modifier "X-else" make: Fatal errors encountered -- cannot continue make: stopped in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/varmod-ifelse.mk diff -u src/usr.bin/make/unit-tests/varmod-ifelse.mk:1.30 src/usr.bin/make/unit-tests/varmod-ifelse.mk:1.31 --- src/usr.bin/make/unit-tests/varmod-ifelse.mk:1.30 Sun Jun 30 13:01:01 2024 +++ src/usr.bin/make/unit-tests/varmod-ifelse.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-ifelse.mk,v 1.30 2024/06/30 13:01:01 rillig Exp $ +# $NetBSD: varmod-ifelse.mk,v 1.31 2024/07/05 19:47:22 rillig Exp $ # # Tests for the ${cond:?then:else} variable modifier, which evaluates either # the then-expression or the else-expression, depending on the condition. @@ -313,7 +313,7 @@ BOTH= <${YES}> <${NO}> .endif -# expect+2: while evaluating then-branch of condition "1": while evaluating "${:X-then}:${:X-else}}": Unknown modifier "X-then" -# expect+1: while evaluating else-branch of condition "1": while evaluating "${:X-else}}": Unknown modifier "X-else" +# expect+2: while evaluating then-branch of condition "1": while evaluating "${:X-then}:${:X-else}}" with value "": Unknown modifier "X-then" +# expect+1: while evaluating else-branch of condition "1": while evaluating "${:X-else}}" with value "": Unknown modifier "X-else" .if ${1:?${:X-then}:${:X-else}} .endif Index: src/usr.bin/make/unit-tests/varmod-localtime.exp diff -u src/usr.bin/make/unit-tests/varmod-localtime.exp:1.16 src/usr.bin/make/unit-tests/varmod-localtime.exp:1.17 --- src/usr.bin/make/unit-tests/varmod-localtime.exp:1.16 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/varmod-localtime.exp Fri Jul 5 19:47:22 2024 @@ -1,10 +1,10 @@ -make: "varmod-localtime.mk" line 61: while evaluating "${:L:localtime=-1} != """: Invalid time value "-1" +make: "varmod-localtime.mk" line 61: while evaluating "${:L:localtime=-1} != """ with value "": Invalid time value "-1" make: "varmod-localtime.mk" line 61: Malformed conditional (${:L:localtime=-1} != "") -make: "varmod-localtime.mk" line 72: while evaluating "${:L:localtime= 1} != """: Invalid time value " 1" +make: "varmod-localtime.mk" line 72: while evaluating "${:L:localtime= 1} != """ with value "": Invalid time value " 1" make: "varmod-localtime.mk" line 72: Malformed conditional (${:L:localtime= 1} != "") -make: "varmod-localtime.mk" line 120: while evaluating "${:L:localtime=10000000000000000000000000000000} != """: Invalid time value "10000000000000000000000000000000" +make: "varmod-localtime.mk" line 120: while evaluating "${:L:localtime=10000000000000000000000000000000} != """ with value "": Invalid time value "10000000000000000000000000000000" make: "varmod-localtime.mk" line 120: Malformed conditional (${:L:localtime=10000000000000000000000000000000} != "") -make: "varmod-localtime.mk" line 133: while evaluating "${:L:localtime=error} != """: Invalid time value "error" +make: "varmod-localtime.mk" line 133: while evaluating "${:L:localtime=error} != """ with value "": Invalid time value "error" make: "varmod-localtime.mk" line 133: Malformed conditional (${:L:localtime=error} != "") make: "varmod-localtime.mk" line 144: while evaluating variable "%Y" with value "%Y": Invalid time value "100000S,1970,bad," make: "varmod-localtime.mk" line 144: Malformed conditional (${%Y:L:localtime=100000S,1970,bad,} != "bad") Index: src/usr.bin/make/unit-tests/varmod-localtime.mk diff -u src/usr.bin/make/unit-tests/varmod-localtime.mk:1.16 src/usr.bin/make/unit-tests/varmod-localtime.mk:1.17 --- src/usr.bin/make/unit-tests/varmod-localtime.mk:1.16 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-localtime.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-localtime.mk,v 1.16 2024/07/04 17:47:54 rillig Exp $ +# $NetBSD: varmod-localtime.mk,v 1.17 2024/07/05 19:47:22 rillig Exp $ # # Tests for the :localtime variable modifier, which formats a timestamp # using strftime(3) in local time. @@ -56,7 +56,7 @@ # 1970. Going back 50 years in the past is not a practical use case for # make. Therefore, since var.c 1.631, negative time stamps produce a # parse error. -# expect+2: while evaluating "${:L:localtime=-1} != """: Invalid time value "-1" +# expect+2: while evaluating "${:L:localtime=-1} != """ with value "": Invalid time value "-1" # expect+1: Malformed conditional (${:L:localtime=-1} != "") .if ${:L:localtime=-1} != "" . error @@ -67,7 +67,7 @@ # Spaces were allowed before var.c 1.631 from 2020-10-31 21:40:20, not # because it would make sense but just as a side-effect from using strtoul. -# expect+2: while evaluating "${:L:localtime= 1} != """: Invalid time value " 1" +# expect+2: while evaluating "${:L:localtime= 1} != """ with value "": Invalid time value " 1" # expect+1: Malformed conditional (${:L:localtime= 1} != "") .if ${:L:localtime= 1} != "" . error @@ -115,7 +115,7 @@ # # Since var.c 1.631 from 2020-10-31, the overflow is detected and produces a # parse error. -# expect+2: while evaluating "${:L:localtime=10000000000000000000000000000000} != """: Invalid time value "10000000000000000000000000000000" +# expect+2: while evaluating "${:L:localtime=10000000000000000000000000000000} != """ with value "": Invalid time value "10000000000000000000000000000000" # expect+1: Malformed conditional (${:L:localtime=10000000000000000000000000000000} != "") .if ${:L:localtime=10000000000000000000000000000000} != "" . error @@ -128,7 +128,7 @@ # stopped after the '=', and the remaining string was parsed for more variable # modifiers. Because of the unknown modifier 'e' from the 'error', the whole # variable value was discarded and thus not printed. -# expect+2: while evaluating "${:L:localtime=error} != """: Invalid time value "error" +# expect+2: while evaluating "${:L:localtime=error} != """ with value "": Invalid time value "error" # expect+1: Malformed conditional (${:L:localtime=error} != "") .if ${:L:localtime=error} != "" . error Index: src/usr.bin/make/unit-tests/varparse-errors.mk diff -u src/usr.bin/make/unit-tests/varparse-errors.mk:1.16 src/usr.bin/make/unit-tests/varparse-errors.mk:1.17 --- src/usr.bin/make/unit-tests/varparse-errors.mk:1.16 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/varparse-errors.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varparse-errors.mk,v 1.16 2024/07/05 18:59:33 rillig Exp $ +# $NetBSD: varparse-errors.mk,v 1.17 2024/07/05 19:47:22 rillig Exp $ # Tests for parsing and evaluating all kinds of expressions. # @@ -34,7 +34,7 @@ ERR_EVAL= An evaluation error ${:Uvalue: # As of 2020-12-01, errors in the variable name are silently ignored. # Since var.c 1.754 from 2020-12-20, unknown modifiers at parse time result # in an error message and a non-zero exit status. -# expect+1: while evaluating "${:U:Z}": Unknown modifier "Z" +# expect+1: while evaluating "${:U:Z}" with value "": Unknown modifier "Z" VAR.${:U:Z}= unknown modifier in the variable name .if ${VAR.} != "unknown modifier in the variable name" . error @@ -43,7 +43,7 @@ VAR.${:U:Z}= unknown modifier in the var # As of 2020-12-01, errors in the variable name are silently ignored. # Since var.c 1.754 from 2020-12-20, unknown modifiers at parse time result # in an error message and a non-zero exit status. -# expect+1: while evaluating "${:U:Z}post": Unknown modifier "Z" +# expect+1: while evaluating "${:U:Z}post" with value "": Unknown modifier "Z" VAR.${:U:Z}post= unknown modifier with text in the variable name .if ${VAR.post} != "unknown modifier with text in the variable name" . error @@ -66,12 +66,12 @@ VAR.${:U:Z}post= unknown modifier with t # #.MAKEFLAGS: -dv IND= ${:OX} -# expect+6: while evaluating "${:U:OX:U${IND}} ${:U:OX:U${IND}}": Bad modifier ":OX" -# expect+5: while evaluating "${:U:OX:U${IND}}": Bad modifier ":OX" +# expect+6: while evaluating "${:U:OX:U${IND}} ${:U:OX:U${IND}}" with value "": Bad modifier ":OX" +# expect+5: while evaluating "${:U:OX:U${IND}}" with value "": Bad modifier ":OX" # expect+4: Undefined variable "${:U:OX" -# expect+3: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}": Bad modifier ":OX" +# expect+3: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}" with value "": Bad modifier ":OX" # expect+2: Undefined variable "${:U:OX" -# expect+1: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}": Bad modifier ":OX" +# expect+1: while evaluating variable "IND" with value "${:OX}": while evaluating "${:OX}" with value "": Bad modifier ":OX" _:= ${:U:OX:U${IND}} ${:U:OX:U${IND}} #.MAKEFLAGS: -d0 @@ -79,31 +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+1: while evaluating "${:U:Q": Unclosed expression, expecting '}' for modifier "Q" +# expect+1: while evaluating "${:U:Q" with value "": Unclosed expression, expecting '}' for modifier "Q" UNCLOSED:= ${:U:Q -# expect+1: while evaluating "${:U:sh": Unclosed expression, expecting '}' for modifier "sh" +# expect+1: while evaluating "${:U:sh" with value "": Unclosed expression, expecting '}' for modifier "sh" UNCLOSED:= ${:U:sh -# expect+1: while evaluating "${:U:tA": Unclosed expression, expecting '}' for modifier "tA" +# expect+1: while evaluating "${:U:tA" with value "": Unclosed expression, expecting '}' for modifier "tA" UNCLOSED:= ${:U:tA -# expect+1: while evaluating "${:U:tsX": Unclosed expression, expecting '}' for modifier "tsX" +# expect+1: while evaluating "${:U:tsX" with value "": Unclosed expression, expecting '}' for modifier "tsX" UNCLOSED:= ${:U:tsX -# expect+1: while evaluating "${:U:ts": Unclosed expression, expecting '}' for modifier "ts" +# expect+1: while evaluating "${:U:ts" with value "": Unclosed expression, expecting '}' for modifier "ts" UNCLOSED:= ${:U:ts -# expect+1: while evaluating "${:U:ts\040": Unclosed expression, expecting '}' for modifier "ts\040" +# expect+1: while evaluating "${:U:ts\040" with value "": Unclosed expression, expecting '}' for modifier "ts\040" UNCLOSED:= ${:U:ts\040 -# expect+1: while evaluating "${:U:u": Unclosed expression, expecting '}' for modifier "u" +# expect+1: while evaluating "${:U:u" with value "": Unclosed expression, expecting '}' for modifier "u" UNCLOSED:= ${:U:u -# expect+1: while evaluating "${:U:H": Unclosed expression, expecting '}' for modifier "H" +# expect+1: while evaluating "${:U:H" with value ".": Unclosed expression, expecting '}' for modifier "H" UNCLOSED:= ${:U:H -# expect+1: while evaluating "${:U:[1]": Unclosed expression, expecting '}' for modifier "[1]" +# expect+1: while evaluating "${:U:[1]" with value "": Unclosed expression, expecting '}' for modifier "[1]" UNCLOSED:= ${:U:[1] -# expect+1: while evaluating "${:U:hash": Unclosed expression, expecting '}' for modifier "hash" +# expect+1: while evaluating "${:U:hash" with value "b2af338b": Unclosed expression, expecting '}' for modifier "hash" UNCLOSED:= ${:U:hash -# expect+1: while evaluating "${:U:range": Unclosed expression, expecting '}' for modifier "range" +# expect+1: while evaluating "${:U:range" with value "1": Unclosed expression, expecting '}' for modifier "range" UNCLOSED:= ${:U:range -# expect+1: while evaluating "${:U:_": Unclosed expression, expecting '}' for modifier "_" +# expect+1: while evaluating "${:U:_" with value "": Unclosed expression, expecting '}' for modifier "_" UNCLOSED:= ${:U:_ -# expect+1: while evaluating "${:U:gmtime": Unclosed expression, expecting '}' for modifier "gmtime" +# expect+1: while evaluating "${:U:gmtime" with value "<timestamp>": Unclosed expression, expecting '}' for modifier "gmtime" UNCLOSED:= ${:U:gmtime -# expect+1: while evaluating "${:U:localtime": Unclosed expression, expecting '}' for modifier "localtime" +# expect+1: while evaluating "${:U:localtime" with value "<timestamp>": Unclosed expression, expecting '}' for modifier "localtime" UNCLOSED:= ${:U:localtime Index: src/usr.bin/make/unit-tests/varmod-loop-delete.mk diff -u src/usr.bin/make/unit-tests/varmod-loop-delete.mk:1.5 src/usr.bin/make/unit-tests/varmod-loop-delete.mk:1.6 --- src/usr.bin/make/unit-tests/varmod-loop-delete.mk:1.5 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-loop-delete.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-loop-delete.mk,v 1.5 2024/07/04 17:47:54 rillig Exp $ +# $NetBSD: varmod-loop-delete.mk,v 1.6 2024/07/05 19:47:22 rillig Exp $ # # Tests for the variable modifier ':@', which as a side effect allows to # delete an arbitrary variable. @@ -16,7 +16,7 @@ VAR= ${:U:@VAR@@} rest of the value # In an assignment, the scope is 'Global'. Since the variable 'VAR' is # defined in the global scope, it deletes itself. -# expect+1: while evaluating variable "VAR" with value "${:U:@VAR@@} rest of the value": while evaluating "${:U:@VAR@@} rest of the value": Cannot delete variable "VAR" while it is used +# expect+1: while evaluating variable "VAR" with value "${:U:@VAR@@} rest of the value": while evaluating "${:U:@VAR@@} rest of the value" with value "": Cannot delete variable "VAR" while it is used EVAL:= ${VAR} .if ${EVAL} != " rest of the value" . error Index: src/usr.bin/make/unit-tests/varmod-subst.exp diff -u src/usr.bin/make/unit-tests/varmod-subst.exp:1.5 src/usr.bin/make/unit-tests/varmod-subst.exp:1.6 --- src/usr.bin/make/unit-tests/varmod-subst.exp:1.5 Sat Apr 20 10:18:55 2024 +++ src/usr.bin/make/unit-tests/varmod-subst.exp Fri Jul 5 19:47:22 2024 @@ -45,7 +45,7 @@ mod-subst-delimiter: 1 two 3 tilde mod-subst-chain: A B c. -make: in target "mod-subst-chain": while evaluating "${:Uvalue:S,a,x,i}.": Unknown modifier "i" +make: in target "mod-subst-chain": while evaluating "${:Uvalue:S,a,x,i}." with value "vxlue": Unknown modifier "i" . mod-subst-dollar:$1: mod-subst-dollar:$2: Index: src/usr.bin/make/unit-tests/varmod-loop-varname.exp diff -u src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.9 src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.10 --- src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.9 Thu Jul 4 20:18:40 2024 +++ src/usr.bin/make/unit-tests/varmod-loop-varname.exp Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -make: "varmod-loop-varname.mk" line 18: while evaluating "${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+"": In the :@ modifier, the variable name "${:Ubar:S,b,v,}" must not contain a dollar +make: "varmod-loop-varname.mk" line 18: while evaluating "${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+"" with value "one two three": In the :@ modifier, the variable name "${:Ubar:S,b,v,}" must not contain a dollar make: "varmod-loop-varname.mk" line 18: Malformed conditional (${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+") make: "varmod-loop-varname.mk" line 89: while evaluating variable "1 2 3" with value "1 2 3": In the :@ modifier, the variable name "v$" must not contain a dollar make: "varmod-loop-varname.mk" line 89: Malformed conditional (${1 2 3:L:@v$@($v)@} != "(1) (2) (3)") Index: src/usr.bin/make/unit-tests/varmod-shell.mk diff -u src/usr.bin/make/unit-tests/varmod-shell.mk:1.9 src/usr.bin/make/unit-tests/varmod-shell.mk:1.10 --- src/usr.bin/make/unit-tests/varmod-shell.mk:1.9 Sun Jun 30 11:37:21 2024 +++ src/usr.bin/make/unit-tests/varmod-shell.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-shell.mk,v 1.9 2024/06/30 11:37:21 rillig Exp $ +# $NetBSD: varmod-shell.mk,v 1.10 2024/07/05 19:47:22 rillig Exp $ # # Tests for the ':!cmd!' variable modifier, which runs the shell command # given by the variable modifier and returns its output. @@ -21,18 +21,18 @@ # Between 2000-04-29 and 2020-11-17, the error message mentioned the previous # value of the expression (which is usually an empty string) instead of the # command that was executed. -# expect+1: warning: while evaluating "${:!echo word; (exit 13)!} != "word"": Command "echo word; (exit 13)" exited with status 13 +# expect+1: warning: while evaluating "${:!echo word; (exit 13)!} != "word"" with value "word": Command "echo word; (exit 13)" exited with status 13 .if ${:!echo word; (exit 13)!} != "word" . error .endif -# expect+1: warning: while evaluating "${:Uprevious value:!echo word; (exit 13)!} != "word"": Command "echo word; (exit 13)" exited with status 13 +# expect+1: warning: while evaluating "${:Uprevious value:!echo word; (exit 13)!} != "word"" with value "word": Command "echo word; (exit 13)" exited with status 13 .if ${:Uprevious value:!echo word; (exit 13)!} != "word" . error .endif .MAKEFLAGS: -dv # to see the "Capturing" debug output -# expect+1: warning: while evaluating "${:!echo word; ${:U(exit 13)}!}": Command "echo word; (exit 13)" exited with status 13 +# expect+1: warning: while evaluating "${:!echo word; ${:U(exit 13)}!}" with value "word": Command "echo word; (exit 13)" exited with status 13 _:= ${:!echo word; ${:U(exit 13)}!} .MAKEFLAGS: -d0 Index: src/usr.bin/make/unit-tests/varmod-subst-regex.exp diff -u src/usr.bin/make/unit-tests/varmod-subst-regex.exp:1.9 src/usr.bin/make/unit-tests/varmod-subst-regex.exp:1.10 --- src/usr.bin/make/unit-tests/varmod-subst-regex.exp:1.9 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-subst-regex.exp Fri Jul 5 19:47:22 2024 @@ -1,26 +1,26 @@ -make: in target "mod-regex-compile-error": while evaluating "${:Uword1 word2:C,****,____,g:C,word,____,:Q}.": Regex compilation error: (details omitted) +make: in target "mod-regex-compile-error": while evaluating "${:Uword1 word2:C,****,____,g:C,word,____,:Q}." with value "word1 word2": Regex compilation error: (details omitted) mod-regex-compile-error: C,word,____,:Q}. -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}": No subexpression \1 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}": No subexpression \1 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}": No subexpression \1 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}": No subexpression \1 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}" with value "1 23 456": No subexpression \1 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}" with value "1 23 456": No subexpression \1 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}" with value "1 23 456": No subexpression \1 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\1\1,:Q}" with value "1 23 456": No subexpression \1 mod-regex-limits:11-missing:1 6 mod-regex-limits:11-ok:1 22 446 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}": No subexpression \2 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}": No subexpression \2 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}": No subexpression \2 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}" with value "1 23 456": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}" with value "1 23 456": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}" with value "1 23 456": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,..,\2\2,:Q}" with value "1 23 456": No subexpression \2 mod-regex-limits:22-missing:1 6 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}": No subexpression \2 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}": No subexpression \2 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}": No subexpression \2 -make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}" with value "1 23 456": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}" with value "1 23 456": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}" with value "1 23 456": No subexpression \2 +make: in target "mod-regex-limits": while evaluating "${:U1 23 456:C,(.).,\2\2,:Q}" with value "1 23 456": No subexpression \2 mod-regex-limits:22-missing:1 6 mod-regex-limits:22-ok:1 33 556 mod-regex-limits:capture:ihgfedcbaabcdefghijABCDEFGHIJa0a1a2rest make: in target "mod-regex-errors": while evaluating variable "UNDEF" with value "value": Regex compilation error: (details omitted) mod-regex-errors: -make: in target "mod-regex-errors": while evaluating variable "word" with value "word": while evaluating "${:U:Z}y,W}": Unknown modifier "Z" +make: in target "mod-regex-errors": while evaluating variable "word" with value "word": while evaluating "${:U:Z}y,W}" with value "": Unknown modifier "Z" mod-regex-errors: xy unmatched-subexpression.ok: one one 2 3 5 8 one3 2one 34 make: No match for subexpression \2 Index: src/usr.bin/make/unit-tests/varmod-loop-varname.mk diff -u src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.8 src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.9 --- src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.8 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-loop-varname.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-loop-varname.mk,v 1.8 2024/07/04 17:47:54 rillig Exp $ +# $NetBSD: varmod-loop-varname.mk,v 1.9 2024/07/05 19:47:22 rillig Exp $ # # Tests for the first part of the variable modifier ':@var@...@', which # contains the variable name to use during the loop. @@ -13,7 +13,7 @@ # dynamically. There was no practical use-case for this. # Since var.c 1.907 from 2021-04-04, a '$' is no longer allowed in the # variable name. -# expect+2: while evaluating "${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+"": In the :@ modifier, the variable name "${:Ubar:S,b,v,}" must not contain a dollar +# expect+2: while evaluating "${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+"" with value "one two three": In the :@ modifier, the variable name "${:Ubar:S,b,v,}" must not contain a dollar # expect+1: Malformed conditional (${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+") .if ${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+" . error Index: src/usr.bin/make/unit-tests/varmod-match-escape.mk diff -u src/usr.bin/make/unit-tests/varmod-match-escape.mk:1.15 src/usr.bin/make/unit-tests/varmod-match-escape.mk:1.16 --- src/usr.bin/make/unit-tests/varmod-match-escape.mk:1.15 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-match-escape.mk Fri Jul 5 19:47:22 2024 @@ -1,4 +1,4 @@ -# $NetBSD: varmod-match-escape.mk,v 1.15 2024/07/04 17:47:54 rillig Exp $ +# $NetBSD: varmod-match-escape.mk,v 1.16 2024/07/05 19:47:22 rillig Exp $ # # As of 2020-08-01, the :M and :N modifiers interpret backslashes differently, # depending on whether there was an expression somewhere before the @@ -65,7 +65,7 @@ VALUES= : :: :\: # In lint mode, the case of a lonely '$' is covered with an error message. .MAKEFLAGS: -dL -# expect+1: while evaluating "${:U\$:M\$} != """: Dollar followed by nothing +# expect+1: while evaluating "${:U\$:M\$} != """ with value "$": Dollar followed by nothing .if ${:U\$:M\$} != "" . error .endif Index: src/usr.bin/make/unit-tests/varmod-to-separator.exp diff -u src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.15 src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.16 --- src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.15 Thu Jul 4 18:53:37 2024 +++ src/usr.bin/make/unit-tests/varmod-to-separator.exp Fri Jul 5 19:47:22 2024 @@ -20,9 +20,9 @@ make: "varmod-to-separator.mk" line 240: make: "varmod-to-separator.mk" line 240: Malformed conditional (${WORDS:ts\X}) make: "varmod-to-separator.mk" line 250: while evaluating variable "WORDS" with value "one two three four five six": Bad modifier ":t\X" make: "varmod-to-separator.mk" line 250: Malformed conditional (${WORDS:t\X} != "anything") -make: "varmod-to-separator.mk" line 267: while evaluating "${:Ua b:ts\69}": Bad modifier ":ts\69" +make: "varmod-to-separator.mk" line 267: while evaluating "${:Ua b:ts\69}" with value "a b": Bad modifier ":ts\69" make: "varmod-to-separator.mk" line 267: Malformed conditional (${:Ua b:ts\69}) -make: "varmod-to-separator.mk" line 276: while evaluating "${:Ua b:ts\x1F60E}": Invalid character number at "1F60E}" +make: "varmod-to-separator.mk" line 276: while evaluating "${:Ua b:ts\x1F60E}" with value "a b": Invalid character number at "1F60E}" make: "varmod-to-separator.mk" line 276: Malformed conditional (${:Ua b:ts\x1F60E}) make: Fatal errors encountered -- cannot continue make: stopped in unit-tests Index: src/usr.bin/make/unit-tests/varmod-shell.exp diff -u src/usr.bin/make/unit-tests/varmod-shell.exp:1.7 src/usr.bin/make/unit-tests/varmod-shell.exp:1.8 --- src/usr.bin/make/unit-tests/varmod-shell.exp:1.7 Sun Jun 30 11:37:21 2024 +++ src/usr.bin/make/unit-tests/varmod-shell.exp Fri Jul 5 19:47:22 2024 @@ -1,11 +1,11 @@ -make: "varmod-shell.mk" line 25: warning: while evaluating "${:!echo word; (exit 13)!} != "word"": Command "echo word; (exit 13)" exited with status 13 -make: "varmod-shell.mk" line 29: warning: while evaluating "${:Uprevious value:!echo word; (exit 13)!} != "word"": Command "echo word; (exit 13)" exited with status 13 +make: "varmod-shell.mk" line 25: warning: while evaluating "${:!echo word; (exit 13)!} != "word"" with value "word": Command "echo word; (exit 13)" exited with status 13 +make: "varmod-shell.mk" line 29: warning: while evaluating "${:Uprevious value:!echo word; (exit 13)!} != "word"" with value "word": Command "echo word; (exit 13)" exited with status 13 Global: _ = # (empty) Var_Parse: ${:!echo word; ${:U(exit 13)}!} (eval-keep-dollar-and-undefined) Evaluating modifier ${:!...} on value "" (eval-keep-dollar-and-undefined, undefined) Modifier part: "echo word; (exit 13)" Capturing the output of command "echo word; (exit 13)" -make: "varmod-shell.mk" line 36: warning: while evaluating "${:!echo word; ${:U(exit 13)}!}": Command "echo word; (exit 13)" exited with status 13 +make: "varmod-shell.mk" line 36: warning: while evaluating "${:!echo word; ${:U(exit 13)}!}" with value "word": Command "echo word; (exit 13)" exited with status 13 Result of ${:!echo word; ${:U(exit 13)}!} is "word" (eval-keep-dollar-and-undefined, defined) Global: _ = word Global: .MAKEFLAGS = -r -k -d v -d