Module Name: src
Committed By: rillig
Date: Sat Apr 20 10:18:56 UTC 2024
Modified Files:
src/usr.bin/make: compat.c job.c make.h parse.c var.c
src/usr.bin/make/unit-tests: Makefile cmd-errors-jobs.exp
cmd-errors-jobs.mk cmd-errors-lint.exp cmd-errors.exp
cond-token-string.exp cond-token-string.mk deptgt.exp deptgt.mk
directive-for-errors.exp directive-for-errors.mk directive-for.exp
directive-for.mk directive-include.exp directive-include.mk
directive-undef.exp directive-undef.mk lint.exp moderrs.exp
opt-debug-lint.exp opt-debug-lint.mk var-eval-short.exp
var-eval-short.mk var-op-expand.exp var-op-expand.mk vardebug.exp
vardebug.mk varmisc.exp varmod-assign.exp varmod-assign.mk
varmod-edge.exp varmod-edge.mk varmod-gmtime.exp varmod-gmtime.mk
varmod-hash.exp varmod-ifelse.exp varmod-ifelse.mk
varmod-indirect.exp varmod-indirect.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-match.exp
varmod-match.mk varmod-mtime.exp varmod-mtime.mk varmod-range.exp
varmod-range.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: provide more context information for parse/evaluate errors
To generate a diff of this commit:
cvs rdiff -u -r1.254 -r1.255 src/usr.bin/make/compat.c
cvs rdiff -u -r1.467 -r1.468 src/usr.bin/make/job.c
cvs rdiff -u -r1.329 -r1.330 src/usr.bin/make/make.h
cvs rdiff -u -r1.719 -r1.720 src/usr.bin/make/parse.c
cvs rdiff -u -r1.1101 -r1.1102 src/usr.bin/make/var.c
cvs rdiff -u -r1.342 -r1.343 src/usr.bin/make/unit-tests/Makefile
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/make/unit-tests/cmd-errors-jobs.exp \
src/usr.bin/make/unit-tests/cmd-errors-lint.exp \
src/usr.bin/make/unit-tests/varmod-subst.exp
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk
cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/cmd-errors.exp \
src/usr.bin/make/unit-tests/varmod-mtime.exp
cvs rdiff -u -r1.11 -r1.12 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/var-eval-short.mk \
src/usr.bin/make/unit-tests/varmod-range.exp \
src/usr.bin/make/unit-tests/varmod-to-separator.exp \
src/usr.bin/make/unit-tests/varparse-errors.mk
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/make/unit-tests/cond-token-string.mk \
src/usr.bin/make/unit-tests/directive-for-errors.mk \
src/usr.bin/make/unit-tests/directive-undef.exp \
src/usr.bin/make/unit-tests/vardebug.mk \
src/usr.bin/make/unit-tests/varmod-mtime.mk
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/make/unit-tests/deptgt.exp \
src/usr.bin/make/unit-tests/varmod-match-escape.mk
cvs rdiff -u -r1.16 -r1.17 src/usr.bin/make/unit-tests/deptgt.mk \
src/usr.bin/make/unit-tests/opt-debug-lint.mk \
src/usr.bin/make/unit-tests/varmod-edge.exp \
src/usr.bin/make/unit-tests/varmod-gmtime.exp
cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/directive-for-errors.exp
cvs rdiff -u -r1.21 -r1.22 src/usr.bin/make/unit-tests/directive-for.exp \
src/usr.bin/make/unit-tests/varmod-gmtime.mk
cvs rdiff -u -r1.24 -r1.25 src/usr.bin/make/unit-tests/directive-for.mk \
src/usr.bin/make/unit-tests/var-eval-short.exp
cvs rdiff -u -r1.13 -r1.14 src/usr.bin/make/unit-tests/directive-include.mk \
src/usr.bin/make/unit-tests/directive-undef.mk \
src/usr.bin/make/unit-tests/varmod-localtime.exp \
src/usr.bin/make/unit-tests/varmod-to-separator.mk
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/lint.exp \
src/usr.bin/make/unit-tests/varmod-hash.exp \
src/usr.bin/make/unit-tests/varmod-loop-delete.exp \
src/usr.bin/make/unit-tests/varmod-loop-delete.mk
cvs rdiff -u -r1.34 -r1.35 src/usr.bin/make/unit-tests/moderrs.exp \
src/usr.bin/make/unit-tests/vardebug.exp
cvs rdiff -u -r1.18 -r1.19 src/usr.bin/make/unit-tests/opt-debug-lint.exp \
src/usr.bin/make/unit-tests/varmod-indirect.mk \
src/usr.bin/make/unit-tests/varmod-match-escape.exp
cvs rdiff -u -r1.8 -r1.9 src/usr.bin/make/unit-tests/var-op-expand.exp \
src/usr.bin/make/unit-tests/varmod.exp
cvs rdiff -u -r1.19 -r1.20 src/usr.bin/make/unit-tests/var-op-expand.mk \
src/usr.bin/make/unit-tests/varmisc.exp \
src/usr.bin/make/unit-tests/varmod-assign.exp \
src/usr.bin/make/unit-tests/varmod-assign.mk \
src/usr.bin/make/unit-tests/varmod-edge.mk \
src/usr.bin/make/unit-tests/varmod-ifelse.exp
cvs rdiff -u -r1.26 -r1.27 src/usr.bin/make/unit-tests/varmod-ifelse.mk
cvs rdiff -u -r1.27 -r1.28 src/usr.bin/make/unit-tests/varmod-indirect.exp
cvs rdiff -u -r1.14 -r1.15 src/usr.bin/make/unit-tests/varmod-localtime.mk \
src/usr.bin/make/unit-tests/varmod-match.exp
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/varmod-loop-varname.exp \
src/usr.bin/make/unit-tests/varmod-loop-varname.mk \
src/usr.bin/make/unit-tests/varmod-subst-regex.exp
cvs rdiff -u -r1.20 -r1.21 src/usr.bin/make/unit-tests/varmod-match.mk
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/make/unit-tests/varmod-range.mk \
src/usr.bin/make/unit-tests/varmod.mk \
src/usr.bin/make/unit-tests/varparse-errors.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/compat.c
diff -u src/usr.bin/make/compat.c:1.254 src/usr.bin/make/compat.c:1.255
--- src/usr.bin/make/compat.c:1.254 Sun Mar 10 02:53:37 2024
+++ src/usr.bin/make/compat.c Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.254 2024/03/10 02:53:37 sjg Exp $ */
+/* $NetBSD: compat.c,v 1.255 2024/04/20 10:18:55 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -91,7 +91,7 @@
#include "pathnames.h"
/* "@(#)compat.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: compat.c,v 1.254 2024/03/10 02:53:37 sjg Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.255 2024/04/20 10:18:55 rillig Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -234,7 +234,9 @@ Compat_RunCommand(const char *cmdp, GNod
errCheck = !(gn->type & OP_IGNORE);
doIt = false;
+ EvalStack_Push(gn->name, NULL, NULL);
cmdStart = Var_Subst(cmd, gn, VARE_WANTRES);
+ EvalStack_Pop();
/* TODO: handle errors */
if (cmdStart[0] == '\0') {
Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.467 src/usr.bin/make/job.c:1.468
--- src/usr.bin/make/job.c:1.467 Sun Mar 10 02:53:37 2024
+++ src/usr.bin/make/job.c Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.467 2024/03/10 02:53:37 sjg Exp $ */
+/* $NetBSD: job.c,v 1.468 2024/04/20 10:18:55 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -141,7 +141,7 @@
#include "trace.h"
/* "@(#)job.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.467 2024/03/10 02:53:37 sjg Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.468 2024/04/20 10:18:55 rillig Exp $");
/*
* A shell defines how the commands are run. All commands for a target are
@@ -901,7 +901,9 @@ JobWriteCommand(Job *job, ShellWriter *w
run = GNode_ShouldExecute(job->node);
+ EvalStack_Push(job->node->name, NULL, NULL);
xcmd = Var_Subst(ucmd, job->node, VARE_WANTRES);
+ EvalStack_Pop();
/* TODO: handle errors */
xcmdStart = xcmd;
@@ -1028,7 +1030,9 @@ JobSaveCommands(Job *job)
* variables such as .TARGET, .IMPSRC. It is not intended to
* expand the other variables as well; see deptgt-end.mk.
*/
+ EvalStack_Push(job->node->name, NULL, NULL);
expanded_cmd = Var_Subst(cmd, job->node, VARE_WANTRES);
+ EvalStack_Pop();
/* TODO: handle errors */
Lst_Append(&Targ_GetEndNode()->commands, expanded_cmd);
}
Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.329 src/usr.bin/make/make.h:1.330
--- src/usr.bin/make/make.h:1.329 Sun Mar 10 02:53:37 2024
+++ src/usr.bin/make/make.h Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.329 2024/03/10 02:53:37 sjg Exp $ */
+/* $NetBSD: make.h,v 1.330 2024/04/20 10:18:55 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -1023,6 +1023,10 @@ void Global_Append(const char *, const c
void Global_Delete(const char *);
void Global_Set_ReadOnly(const char *, const char *);
+void EvalStack_Push(const char *, const char *, const char *);
+void EvalStack_Pop(void);
+const char *EvalStack_Details(void);
+
/* util.c */
typedef void (*SignalProc)(int);
SignalProc bmake_signal(int, SignalProc);
Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.719 src/usr.bin/make/parse.c:1.720
--- src/usr.bin/make/parse.c:1.719 Sun Apr 14 12:30:47 2024
+++ src/usr.bin/make/parse.c Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.719 2024/04/14 12:30:47 rillig Exp $ */
+/* $NetBSD: parse.c,v 1.720 2024/04/20 10:18:55 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -105,7 +105,7 @@
#include "pathnames.h"
/* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: parse.c,v 1.719 2024/04/14 12:30:47 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.720 2024/04/20 10:18:55 rillig Exp $");
/* Detects a multiple-inclusion guard in a makefile. */
typedef enum {
@@ -521,6 +521,7 @@ ParseVErrorInternal(FILE *f, bool useVar
(void)fprintf(f, "%s: ", progname);
PrintLocation(f, useVars, gn);
+ fprintf(f, "%s", EvalStack_Details());
if (level == PARSE_WARNING)
(void)fprintf(f, "warning: ");
(void)vfprintf(f, fmt, ap);
Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.1101 src/usr.bin/make/var.c:1.1102
--- src/usr.bin/make/var.c:1.1101 Fri Mar 1 17:53:30 2024
+++ src/usr.bin/make/var.c Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.1101 2024/03/01 17:53:30 rillig Exp $ */
+/* $NetBSD: var.c,v 1.1102 2024/04/20 10:18:55 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -137,7 +137,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1101 2024/03/01 17:53:30 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1102 2024/04/20 10:18:55 rillig Exp $");
/*
* Variables are defined using one of the VAR=value assignments. Their
@@ -258,6 +258,18 @@ typedef struct SepBuf {
char sep;
} SepBuf;
+typedef struct {
+ const char *target;
+ const char *varname;
+ const char *expr;
+} EvalStackElement;
+
+typedef struct {
+ EvalStackElement *elems;
+ size_t len;
+ size_t cap;
+ Buffer details;
+} EvalStack;
/* Whether we have replaced the original environ (which we cannot free). */
char **savedEnv = NULL;
@@ -326,6 +338,58 @@ static const char VarEvalMode_Name[][32]
"eval-keep-dollar-and-undefined",
};
+static EvalStack evalStack;
+
+
+void
+EvalStack_Push(const char *target, const char *expr, const char *varname)
+{
+ if (evalStack.len >= evalStack.cap) {
+ evalStack.cap = 16 + 2 * evalStack.cap;
+ evalStack.elems = bmake_realloc(evalStack.elems,
+ evalStack.cap * sizeof(*evalStack.elems));
+ }
+ evalStack.elems[evalStack.len].target = target;
+ evalStack.elems[evalStack.len].expr = expr;
+ evalStack.elems[evalStack.len].varname = varname;
+ evalStack.len++;
+}
+
+void
+EvalStack_Pop(void)
+{
+ assert(evalStack.len > 0);
+ evalStack.len--;
+}
+
+const char *
+EvalStack_Details(void)
+{
+ size_t i;
+ Buffer *buf = &evalStack.details;
+
+
+ buf->len = 0;
+ for (i = 0; i < evalStack.len; i++) {
+ EvalStackElement *elem = evalStack.elems + i;
+ if (elem->target != NULL) {
+ Buf_AddStr(buf, "in target \"");
+ Buf_AddStr(buf, elem->target);
+ Buf_AddStr(buf, "\": ");
+ }
+ if (elem->expr != NULL) {
+ Buf_AddStr(buf, "while evaluating \"");
+ Buf_AddStr(buf, elem->expr);
+ Buf_AddStr(buf, "\": ");
+ }
+ if (elem->varname != NULL) {
+ Buf_AddStr(buf, "while evaluating variable \"");
+ Buf_AddStr(buf, elem->varname);
+ Buf_AddStr(buf, "\": ");
+ }
+ }
+ return buf->len > 0 ? buf->data : "";
+}
static Var *
VarNew(FStr name, const char *value,
@@ -2324,9 +2388,9 @@ ApplyModifier_Loop(const char **pp, ModC
args.var = tvar.str;
if (strchr(args.var, '$') != NULL) {
Parse_Error(PARSE_FATAL,
- "In the :@ modifier of \"%s\", the variable name \"%s\" "
+ "In the :@ modifier, the variable name \"%s\" "
"must not contain a dollar",
- expr->name, args.var);
+ args.var);
return AMR_CLEANUP;
}
@@ -4503,6 +4567,11 @@ Var_Parse(const char **pp, GNode *scope,
*/
expr.value = FStr_InitRefer(v->val.data);
+ if (expr.name[0] != '\0')
+ EvalStack_Push(NULL, NULL, expr.name);
+ else
+ EvalStack_Push(NULL, start, NULL);
+
/*
* Before applying any modifiers, expand any nested expressions from
* the variable value.
@@ -4559,6 +4628,7 @@ Var_Parse(const char **pp, GNode *scope,
VarFreeShortLived(v);
}
+ EvalStack_Pop();
return expr.value;
}
Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.342 src/usr.bin/make/unit-tests/Makefile:1.343
--- src/usr.bin/make/unit-tests/Makefile:1.342 Sun Jan 7 02:07:44 2024
+++ src/usr.bin/make/unit-tests/Makefile Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.342 2024/01/07 02:07:44 sjg Exp $
+# $NetBSD: Makefile,v 1.343 2024/04/20 10:18:55 rillig Exp $
#
# Unit tests for make(1)
#
@@ -559,7 +559,7 @@ SED_CMDS.suff-transform-debug+= ${STD_SE
SED_CMDS.var-op-shell+= ${STD_SED_CMDS.shell}
SED_CMDS.var-op-shell+= -e '/command/s,No such.*,not found,'
SED_CMDS.vardebug+= -e 's,${.SHELL},</path/to/shell>,'
-SED_CMDS.varmod-mtime+= -e "s,': .*,': <ENOENT>,"
+SED_CMDS.varmod-mtime+= -e "s,\(.*\)': .*,\1': <ENOENT>,"
SED_CMDS.varmod-subst-regex+= ${STD_SED_CMDS.regex}
SED_CMDS.varparse-errors+= ${STD_SED_CMDS.timestamp}
SED_CMDS.varname-dot-make-meta-ignore_filter+= ${SED_CMDS.meta-ignore}
Index: src/usr.bin/make/unit-tests/cmd-errors-jobs.exp
diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.4 src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.5
--- src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.4 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/cmd-errors-jobs.exp Sat Apr 20 10:18:55 2024
@@ -1,9 +1,9 @@
: undefined--eol
-make: Unclosed variable "UNCLOSED"
+make: in target "unclosed-variable": Unclosed variable "UNCLOSED"
: unclosed-variable-
make: Unclosed expression, expecting '}' for "UNCLOSED"
: unclosed-modifier-
-make: Unknown modifier "Z"
+make: in target "unknown-modifier": while evaluating variable "UNKNOWN": Unknown modifier "Z"
: unknown-modifier--eol
: end-eol
exit status 0
Index: src/usr.bin/make/unit-tests/cmd-errors-lint.exp
diff -u src/usr.bin/make/unit-tests/cmd-errors-lint.exp:1.4 src/usr.bin/make/unit-tests/cmd-errors-lint.exp:1.5
--- src/usr.bin/make/unit-tests/cmd-errors-lint.exp:1.4 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/cmd-errors-lint.exp Sat Apr 20 10:18:55 2024
@@ -1,9 +1,9 @@
: undefined
-make: Unclosed variable "UNCLOSED"
+make: in target "unclosed-variable": Unclosed variable "UNCLOSED"
: unclosed-variable
make: Unclosed expression, expecting '}' for "UNCLOSED"
: unclosed-modifier
-make: Unknown modifier "Z"
+make: in target "unknown-modifier": while evaluating variable "UNKNOWN": Unknown modifier "Z"
: unknown-modifier
: end
exit status 2
Index: src/usr.bin/make/unit-tests/varmod-subst.exp
diff -u src/usr.bin/make/unit-tests/varmod-subst.exp:1.4 src/usr.bin/make/unit-tests/varmod-subst.exp:1.5
--- src/usr.bin/make/unit-tests/varmod-subst.exp:1.4 Tue Feb 23 15:19:41 2021
+++ src/usr.bin/make/unit-tests/varmod-subst.exp Sat Apr 20 10:18:55 2024
@@ -45,7 +45,7 @@ mod-subst-delimiter:
1 two 3 tilde
mod-subst-chain:
A B c.
-make: Unknown modifier "i"
+make: in target "mod-subst-chain": while evaluating "${:Uvalue:S,a,x,i}.": Unknown modifier "i"
.
mod-subst-dollar:$1:
mod-subst-dollar:$2:
Index: src/usr.bin/make/unit-tests/cmd-errors-jobs.mk
diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.2 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.3
--- src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.2 Sun Sep 25 12:51:37 2022
+++ src/usr.bin/make/unit-tests/cmd-errors-jobs.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: cmd-errors-jobs.mk,v 1.2 2022/09/25 12:51:37 rillig Exp $
+# $NetBSD: cmd-errors-jobs.mk,v 1.3 2024/04/20 10:18:55 rillig Exp $
#
# Demonstrate how errors in variable expansions affect whether the commands
# are actually executed in jobs mode.
@@ -8,25 +8,31 @@
all: undefined unclosed-variable unclosed-modifier unknown-modifier end
# Undefined variables are not an error. They expand to empty strings.
+# expect: : undefined--eol
undefined:
: $@-${UNDEFINED}-eol
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
+# XXX: This command is executed even though it contains parse errors.
+# expect: make: in target "unclosed-variable": Unclosed variable "UNCLOSED"
+# expect: : unclosed-variable-
unclosed-variable:
: $@-${UNCLOSED
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
+# XXX: This command is executed even though it contains parse errors.
+# expect: make: Unclosed expression, expecting '}' for "UNCLOSED"
+# expect: : unclosed-modifier-
unclosed-modifier:
: $@-${UNCLOSED:
-# XXX: As of 2020-11-01, this command is executed even though it contains
-# parse errors.
+# XXX: This command is executed even though it contains parse errors.
+# expect: make: in target "unknown-modifier": while evaluating variable "UNKNOWN": Unknown modifier "Z"
+# expect: : unknown-modifier--eol
unknown-modifier:
: $@-${UNKNOWN:Z}-eol
+# expect: : end-eol
end:
: $@-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/cmd-errors.exp
diff -u src/usr.bin/make/unit-tests/cmd-errors.exp:1.7 src/usr.bin/make/unit-tests/cmd-errors.exp:1.8
--- src/usr.bin/make/unit-tests/cmd-errors.exp:1.7 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/cmd-errors.exp Sat Apr 20 10:18:55 2024
@@ -1,9 +1,9 @@
: undefined--eol
-make: Unclosed variable "UNCLOSED"
+make: in target "unclosed-variable": Unclosed variable "UNCLOSED"
: unclosed-variable-
make: Unclosed expression, expecting '}' for "UNCLOSED"
: unclosed-modifier-
-make: Unknown modifier "Z"
+make: in target "unknown-modifier": while evaluating variable "UNKNOWN": Unknown modifier "Z"
: unknown-modifier--eol
: end-eol
exit status 0
Index: src/usr.bin/make/unit-tests/varmod-mtime.exp
diff -u src/usr.bin/make/unit-tests/varmod-mtime.exp:1.7 src/usr.bin/make/unit-tests/varmod-mtime.exp:1.8
--- src/usr.bin/make/unit-tests/varmod-mtime.exp:1.7 Sun Nov 19 12:11:34 2023
+++ src/usr.bin/make/unit-tests/varmod-mtime.exp Sat Apr 20 10:18:55 2024
@@ -1,13 +1,13 @@
-make: "varmod-mtime.mk" line 47: Invalid argument '123x' for modifier ':mtime'
+make: "varmod-mtime.mk" line 47: while evaluating variable "no/such/file": Invalid argument '123x' for modifier ':mtime'
make: "varmod-mtime.mk" line 47: Malformed conditional (${no/such/file:L:mtime=123x})
-make: "varmod-mtime.mk" line 70: Cannot determine mtime for 'no/such/file1': <ENOENT>
-make: "varmod-mtime.mk" line 70: Cannot determine mtime for 'no/such/file2': <ENOENT>
+make: "varmod-mtime.mk" line 70: while evaluating variable "no/such/file1 no/such/file2": Cannot determine mtime for 'no/such/file1': <ENOENT>
+make: "varmod-mtime.mk" line 70: while evaluating variable "no/such/file1 no/such/file2": Cannot determine mtime for 'no/such/file2': <ENOENT>
make: "varmod-mtime.mk" line 70: Malformed conditional (${no/such/file1 no/such/file2:L:mtime=error})
-make: "varmod-mtime.mk" line 81: Invalid argument 'errorhandler-no' for modifier ':mtime'
+make: "varmod-mtime.mk" line 81: while evaluating variable "MAKEFILE": Invalid argument 'errorhandler-no' for modifier ':mtime'
make: "varmod-mtime.mk" line 81: Malformed conditional (${MAKEFILE:mtime=errorhandler-no} > 0)
-make: "varmod-mtime.mk" line 90: Invalid argument 'warn' for modifier ':mtime'
+make: "varmod-mtime.mk" line 90: while evaluating variable "MAKEFILE": Invalid argument 'warn' for modifier ':mtime'
make: "varmod-mtime.mk" line 90: Malformed conditional (${MAKEFILE:mtime=warn} > 0)
-make: "varmod-mtime.mk" line 115: Unknown modifier "mtim"
+make: "varmod-mtime.mk" line 115: while evaluating variable "anything": Unknown modifier "mtim"
make: "varmod-mtime.mk" line 115: Malformed conditional (${anything:L:mtim})
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/cond-token-string.exp
diff -u src/usr.bin/make/unit-tests/cond-token-string.exp:1.11 src/usr.bin/make/unit-tests/cond-token-string.exp:1.12
--- src/usr.bin/make/unit-tests/cond-token-string.exp:1.11 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/cond-token-string.exp Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-make: "cond-token-string.mk" line 15: Unknown modifier "Z"
+make: "cond-token-string.mk" line 15: while evaluating "${:Uvalue:Z}"": 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.11 src/usr.bin/make/unit-tests/directive-include.exp:1.12
--- src/usr.bin/make/unit-tests/directive-include.exp:1.11 Sat Aug 19 10:52:14 2023
+++ src/usr.bin/make/unit-tests/directive-include.exp Sat Apr 20 10:18:55 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: Unknown modifier "Z"
+make: "directive-include.mk" line 56: while evaluating "${:U123:Z}.mk": 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/var-eval-short.mk
diff -u src/usr.bin/make/unit-tests/var-eval-short.mk:1.11 src/usr.bin/make/unit-tests/var-eval-short.mk:1.12
--- src/usr.bin/make/unit-tests/var-eval-short.mk:1.11 Thu Oct 19 18:24:33 2023
+++ src/usr.bin/make/unit-tests/var-eval-short.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: var-eval-short.mk,v 1.11 2023/10/19 18:24:33 rillig Exp $
+# $NetBSD: var-eval-short.mk,v 1.12 2024/04/20 10:18:55 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: In the :@ modifier of "", the variable name "${FAIL}" must not contain a dollar
+# expect+2: while evaluating "${:Uword:@${FAIL}@expr@}": 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.exp
diff -u src/usr.bin/make/unit-tests/varmod-range.exp:1.11 src/usr.bin/make/unit-tests/varmod-range.exp:1.12
--- src/usr.bin/make/unit-tests/varmod-range.exp:1.11 Sun Dec 17 14:07:22 2023
+++ src/usr.bin/make/unit-tests/varmod-range.exp Sat Apr 20 10:18:55 2024
@@ -1,13 +1,13 @@
make: "varmod-range.mk" line 43: Malformed conditional (${:range=5} != "")
-make: "varmod-range.mk" line 67: Invalid number "x}Rest" != "Rest"" for ':range' modifier
+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: Malformed conditional ("${:U:range=x}Rest" != "Rest")
-make: "varmod-range.mk" line 78: Unknown modifier "x0"
+make: "varmod-range.mk" line 78: while evaluating "${:U:range=0x0}Rest" != "Rest"": Unknown modifier "x0"
make: "varmod-range.mk" line 78: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
-make: "varmod-range.mk" line 96: Unknown modifier "rang"
+make: "varmod-range.mk" line 96: while evaluating variable "a b c": Unknown modifier "rang"
make: "varmod-range.mk" line 96: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
-make: "varmod-range.mk" line 105: Unknown modifier "rango"
+make: "varmod-range.mk" line 105: while evaluating variable "a b c": Unknown modifier "rango"
make: "varmod-range.mk" line 105: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
-make: "varmod-range.mk" line 114: Unknown modifier "ranger"
+make: "varmod-range.mk" line 114: while evaluating variable "a b c": Unknown modifier "ranger"
make: "varmod-range.mk" line 114: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/varmod-to-separator.exp
diff -u src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.11 src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.12
--- src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.11 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/varmod-to-separator.exp Sat Apr 20 10:18:55 2024
@@ -1,6 +1,6 @@
-make: "varmod-to-separator.mk" line 155: Invalid character number at "400:tu}"
+make: "varmod-to-separator.mk" line 155: while evaluating variable "WORDS": Invalid character number at "400:tu}"
make: "varmod-to-separator.mk" line 155: Malformed conditional (${WORDS:[1..3]:ts\400:tu})
-make: "varmod-to-separator.mk" line 171: Invalid character number at "100:tu}"
+make: "varmod-to-separator.mk" line 171: while evaluating variable "WORDS": Invalid character number at "100:tu}"
make: "varmod-to-separator.mk" line 171: Malformed conditional (${WORDS:[1..3]:ts\x100:tu})
make: Bad modifier ":ts\-300" for variable "WORDS"
make: "varmod-to-separator.mk" line 179: Malformed conditional (${WORDS:[1..3]:ts\-300:tu})
@@ -18,7 +18,7 @@ make: Bad modifier ":t\X" for variable "
make: "varmod-to-separator.mk" line 232: Malformed conditional (${WORDS:t\X} != "anything")
make: Bad modifier ":ts\69" for variable ""
make: "varmod-to-separator.mk" line 249: Malformed conditional (${:Ua b:ts\69})
-make: "varmod-to-separator.mk" line 258: Invalid character number at "1F60E}"
+make: "varmod-to-separator.mk" line 258: while evaluating "${:Ua b:ts\x1F60E}": Invalid character number at "1F60E}"
make: "varmod-to-separator.mk" line 258: Malformed conditional (${:Ua b:ts\x1F60E})
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/varparse-errors.mk
diff -u src/usr.bin/make/unit-tests/varparse-errors.mk:1.11 src/usr.bin/make/unit-tests/varparse-errors.mk:1.12
--- src/usr.bin/make/unit-tests/varparse-errors.mk:1.11 Sun Nov 19 22:32:44 2023
+++ src/usr.bin/make/unit-tests/varparse-errors.mk Sat Apr 20 10:18:56 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varparse-errors.mk,v 1.11 2023/11/19 22:32:44 rillig Exp $
+# $NetBSD: varparse-errors.mk,v 1.12 2024/04/20 10:18:56 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:U:Z}": 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:U:Z}post": 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
Index: src/usr.bin/make/unit-tests/cond-token-string.mk
diff -u src/usr.bin/make/unit-tests/cond-token-string.mk:1.9 src/usr.bin/make/unit-tests/cond-token-string.mk:1.10
--- src/usr.bin/make/unit-tests/cond-token-string.mk:1.9 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/cond-token-string.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: cond-token-string.mk,v 1.9 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: cond-token-string.mk,v 1.10 2024/04/20 10:18:55 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:Uvalue:Z}"": Unknown modifier "Z"
.if "" != "${:Uvalue:Z}"
. error
.else
Index: src/usr.bin/make/unit-tests/directive-for-errors.mk
diff -u src/usr.bin/make/unit-tests/directive-for-errors.mk:1.9 src/usr.bin/make/unit-tests/directive-for-errors.mk:1.10
--- src/usr.bin/make/unit-tests/directive-for-errors.mk:1.9 Tue Dec 19 19:33:40 2023
+++ src/usr.bin/make/unit-tests/directive-for-errors.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for-errors.mk,v 1.9 2023/12/19 19:33:40 rillig Exp $
+# $NetBSD: directive-for-errors.mk,v 1.10 2024/04/20 10:18:55 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:U3:Z} 4": 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-undef.exp
diff -u src/usr.bin/make/unit-tests/directive-undef.exp:1.9 src/usr.bin/make/unit-tests/directive-undef.exp:1.10
--- src/usr.bin/make/unit-tests/directive-undef.exp:1.9 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/directive-undef.exp Sat Apr 20 10:18:55 2024
@@ -1,5 +1,5 @@
make: "directive-undef.mk" line 30: The .undef directive requires an argument
-make: "directive-undef.mk" line 88: Unknown modifier "Z"
+make: "directive-undef.mk" line 88: while evaluating variable "VARNAMES": Unknown modifier "Z"
make: "directive-undef.mk" line 105: warning: UT_EXPORTED is still listed in .MAKE.EXPORTED even though spaceit is not exported anymore.
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/vardebug.mk
diff -u src/usr.bin/make/unit-tests/vardebug.mk:1.9 src/usr.bin/make/unit-tests/vardebug.mk:1.10
--- src/usr.bin/make/unit-tests/vardebug.mk:1.9 Wed Dec 20 09:46:00 2023
+++ src/usr.bin/make/unit-tests/vardebug.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: vardebug.mk,v 1.9 2023/12/20 09:46:00 rillig Exp $
+# $NetBSD: vardebug.mk,v 1.10 2024/04/20 10:18:55 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: Unknown modifier "unknown"
+# expect+1: while evaluating "${:Uvariable:unknown}": Unknown modifier "unknown"
.if ${:Uvariable:unknown}
.endif
Index: src/usr.bin/make/unit-tests/varmod-mtime.mk
diff -u src/usr.bin/make/unit-tests/varmod-mtime.mk:1.9 src/usr.bin/make/unit-tests/varmod-mtime.mk:1.10
--- src/usr.bin/make/unit-tests/varmod-mtime.mk:1.9 Sun Dec 17 14:07:22 2023
+++ src/usr.bin/make/unit-tests/varmod-mtime.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-mtime.mk,v 1.9 2023/12/17 14:07:22 rillig Exp $
+# $NetBSD: varmod-mtime.mk,v 1.10 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the ':mtime' variable modifier, which maps each word of the
# expression to that file's modification time.
@@ -42,7 +42,7 @@ not_found_mtime:= ${no/such/file:L:mtime
# The fallback timestamp must only be an integer, without trailing characters.
-# expect+2: Invalid argument '123x' for modifier ':mtime'
+# expect+2: while evaluating variable "no/such/file": Invalid argument '123x' for modifier ':mtime'
# expect+1: Malformed conditional (${no/such/file:L:mtime=123x})
.if ${no/such/file:L:mtime=123x}
. error
@@ -64,8 +64,8 @@ _!= rm -f ${COOKIE}
# If the optional argument of the ':mtime' modifier is the word 'error', the
# modifier fails with an error message, once for each affected file.
#
-# expect+3: Cannot determine mtime for 'no/such/file1': <ENOENT>
-# expect+2: Cannot determine mtime for 'no/such/file2': <ENOENT>
+# expect+3: while evaluating variable "no/such/file1 no/such/file2": Cannot determine mtime for 'no/such/file1': <ENOENT>
+# expect+2: while evaluating variable "no/such/file1 no/such/file2": Cannot determine mtime for 'no/such/file2': <ENOENT>
# expect+1: Malformed conditional (${no/such/file1 no/such/file2:L:mtime=error})
.if ${no/such/file1 no/such/file2:L:mtime=error}
. error
@@ -76,7 +76,7 @@ _!= rm -f ${COOKIE}
# Only the word 'error' is a special argument to the ':mtime' modifier, all
# other words result in a parse error.
-# expect+2: Invalid argument 'errorhandler-no' for modifier ':mtime'
+# expect+2: while evaluating variable "MAKEFILE": Invalid argument 'errorhandler-no' for modifier ':mtime'
# expect+1: Malformed conditional (${MAKEFILE:mtime=errorhandler-no} > 0)
.if ${MAKEFILE:mtime=errorhandler-no} > 0
.else
@@ -85,7 +85,7 @@ _!= rm -f ${COOKIE}
# Only the word 'error' can be used as a fallback argument to the modifier.
-# expect+2: Invalid argument 'warn' for modifier ':mtime'
+# expect+2: while evaluating variable "MAKEFILE": Invalid argument 'warn' for modifier ':mtime'
# expect+1: Malformed conditional (${MAKEFILE:mtime=warn} > 0)
.if ${MAKEFILE:mtime=warn} > 0
. error
@@ -110,7 +110,7 @@ end:= ${%s:L:gmtime}
# If there is a typo in the modifier name, it does not match.
-# expect+2: Unknown modifier "mtim"
+# expect+2: while evaluating variable "anything": Unknown modifier "mtim"
# expect+1: Malformed conditional (${anything:L:mtim})
.if ${anything:L:mtim}
. error
Index: src/usr.bin/make/unit-tests/deptgt.exp
diff -u src/usr.bin/make/unit-tests/deptgt.exp:1.12 src/usr.bin/make/unit-tests/deptgt.exp:1.13
--- src/usr.bin/make/unit-tests/deptgt.exp:1.12 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/deptgt.exp Sat Apr 20 10:18:55 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: Unknown modifier "Z"
+make: "deptgt.mk" line 49: while evaluating "${:U:Z}:": 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/varmod-match-escape.mk
diff -u src/usr.bin/make/unit-tests/varmod-match-escape.mk:1.12 src/usr.bin/make/unit-tests/varmod-match-escape.mk:1.13
--- src/usr.bin/make/unit-tests/varmod-match-escape.mk:1.12 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/varmod-match-escape.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-match-escape.mk,v 1.12 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: varmod-match-escape.mk,v 1.13 2024/04/20 10:18:55 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: Dollar followed by nothing
+# expect+1: while evaluating "${:U\$:M\$} != """: Dollar followed by nothing
.if ${:U\$:M\$} != ""
. error
.endif
@@ -105,8 +105,8 @@ EXP.[^A-]]= a
EXP.[^A-]]]= a]
.for pattern in [A-] [A-]] [A-]]] [^A-] [^A-]] [^A-]]]
-# expect+2: warning: Unfinished character list in pattern '[A-]' of modifier ':M'
-# expect+1: warning: Unfinished character list in pattern '[^A-]' of modifier ':M'
+# expect+2: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[A-]' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[^A-]' of modifier ':M'
. if ${WORDS:M${pattern}} != ${EXP.${pattern}}
. warning ${pattern}: ${WORDS:M${pattern}} != ${EXP.${pattern}}
. endif
Index: src/usr.bin/make/unit-tests/deptgt.mk
diff -u src/usr.bin/make/unit-tests/deptgt.mk:1.16 src/usr.bin/make/unit-tests/deptgt.mk:1.17
--- src/usr.bin/make/unit-tests/deptgt.mk:1.16 Sun Dec 17 09:44:00 2023
+++ src/usr.bin/make/unit-tests/deptgt.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: deptgt.mk,v 1.16 2023/12/17 09:44:00 rillig Exp $
+# $NetBSD: deptgt.mk,v 1.17 2024/04/20 10:18:55 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:U:Z}:": Unknown modifier "Z"
$$$$$$$${:U:Z}:
# expect+1: warning: Extra target 'ordinary' ignored
Index: src/usr.bin/make/unit-tests/opt-debug-lint.mk
diff -u src/usr.bin/make/unit-tests/opt-debug-lint.mk:1.16 src/usr.bin/make/unit-tests/opt-debug-lint.mk:1.17
--- src/usr.bin/make/unit-tests/opt-debug-lint.mk:1.16 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/opt-debug-lint.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: opt-debug-lint.mk,v 1.16 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: opt-debug-lint.mk,v 1.17 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the -dL command line option, which runs additional checks
# to catch common mistakes, such as unclosed expressions.
@@ -62,8 +62,8 @@ ${UNDEF}: ${UNDEF}
# Since 2020-10-03, in lint mode the variable modifier must be separated
# by colons. See varparse-mod.mk.
-# expect+2: Missing delimiter ':' after modifier "L"
-# expect+1: Missing delimiter ':' after modifier "P"
+# expect+2: while evaluating variable "value": Missing delimiter ':' after modifier "L"
+# expect+1: while evaluating variable "value": Missing delimiter ':' after modifier "P"
.if ${value:LPL} != "value"
. error
.endif
@@ -72,7 +72,7 @@ ${UNDEF}: ${UNDEF}
# variable modifier had to be separated by colons. This was wrong though
# since make always fell back trying to parse the indirect modifier as a
# SysV modifier.
-# expect+1: Unknown modifier "${"
+# expect+1: while evaluating variable "value": Unknown modifier "${"
.if ${value:${:UL}PL} != "LPL}" # FIXME: "LPL}" is unexpected here.
. error ${value:${:UL}PL}
.endif
Index: src/usr.bin/make/unit-tests/varmod-edge.exp
diff -u src/usr.bin/make/unit-tests/varmod-edge.exp:1.16 src/usr.bin/make/unit-tests/varmod-edge.exp:1.17
--- src/usr.bin/make/unit-tests/varmod-edge.exp:1.16 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/varmod-edge.exp Sat Apr 20 10:18:55 2024
@@ -15,10 +15,10 @@ make: "varmod-edge.mk" line 184: ok eq-b
make: Unfinished modifier for "INP.eq-esc" ('=' missing)
make: "varmod-edge.mk" line 184: ok eq-esc
make: "varmod-edge.mk" line 184: ok colon
-make: "varmod-edge.mk" line 167: Unknown modifier ":"
-make: "varmod-edge.mk" line 167: Unknown modifier ":"
+make: "varmod-edge.mk" line 167: while evaluating variable "MOD.colons": while evaluating variable "INP.colons": Unknown modifier ":"
+make: "varmod-edge.mk" line 167: while evaluating variable "MOD.colons": while evaluating variable "INP.colons": Unknown modifier ":"
make: "varmod-edge.mk" line 184: ok colons
-make: "varmod-edge.mk" line 195: Unknown modifier "Z"
+make: "varmod-edge.mk" line 195: while evaluating "${:Z}": Unknown modifier "Z"
make: "varmod-edge.mk" line 195: Malformed conditional (${:Z})
make: Unfinished modifier for "" (',' missing)
make: "varmod-edge.mk" line 209: Malformed conditional (${:S,})
Index: src/usr.bin/make/unit-tests/varmod-gmtime.exp
diff -u src/usr.bin/make/unit-tests/varmod-gmtime.exp:1.16 src/usr.bin/make/unit-tests/varmod-gmtime.exp:1.17
--- src/usr.bin/make/unit-tests/varmod-gmtime.exp:1.16 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/varmod-gmtime.exp Sat Apr 20 10:18:55 2024
@@ -1,12 +1,12 @@
-make: "varmod-gmtime.mk" line 61: Invalid time value "-1"
+make: "varmod-gmtime.mk" line 61: while evaluating "${:L:gmtime=-1} != """: Invalid time value "-1"
make: "varmod-gmtime.mk" line 61: Malformed conditional (${:L:gmtime=-1} != "")
-make: "varmod-gmtime.mk" line 72: Invalid time value " 1"
+make: "varmod-gmtime.mk" line 72: while evaluating "${:L:gmtime= 1} != """: Invalid time value " 1"
make: "varmod-gmtime.mk" line 72: Malformed conditional (${:L:gmtime= 1} != "")
-make: "varmod-gmtime.mk" line 120: Invalid time value "10000000000000000000000000000000"
+make: "varmod-gmtime.mk" line 120: while evaluating "${:L:gmtime=10000000000000000000000000000000} != """: Invalid time value "10000000000000000000000000000000"
make: "varmod-gmtime.mk" line 120: Malformed conditional (${:L:gmtime=10000000000000000000000000000000} != "")
-make: "varmod-gmtime.mk" line 133: Invalid time value "error"
+make: "varmod-gmtime.mk" line 133: while evaluating "${:L:gmtime=error} != """: Invalid time value "error"
make: "varmod-gmtime.mk" line 133: Malformed conditional (${:L:gmtime=error} != "")
-make: "varmod-gmtime.mk" line 144: Invalid time value "100000S,1970,bad,"
+make: "varmod-gmtime.mk" line 144: while evaluating variable "%Y": Invalid time value "100000S,1970,bad,"
make: "varmod-gmtime.mk" line 144: Malformed conditional (${%Y:L:gmtime=100000S,1970,bad,} != "bad")
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/directive-for-errors.exp
diff -u src/usr.bin/make/unit-tests/directive-for-errors.exp:1.5 src/usr.bin/make/unit-tests/directive-for-errors.exp:1.6
--- src/usr.bin/make/unit-tests/directive-for-errors.exp:1.5 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/directive-for-errors.exp Sat Apr 20 10:18:55 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: Unknown modifier "Z"
+make: "directive-for-errors.mk" line 89: while evaluating "${:U3:Z} 4": 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/directive-for.exp
diff -u src/usr.bin/make/unit-tests/directive-for.exp:1.21 src/usr.bin/make/unit-tests/directive-for.exp:1.22
--- src/usr.bin/make/unit-tests/directive-for.exp:1.21 Wed Dec 6 22:28:20 2023
+++ src/usr.bin/make/unit-tests/directive-for.exp Sat Apr 20 10:18:55 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: Unknown modifier "Z"
+make: "directive-for.mk" line 210: while evaluating "${:Uword2:Z}-after word3": 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.21 src/usr.bin/make/unit-tests/varmod-gmtime.mk:1.22
--- src/usr.bin/make/unit-tests/varmod-gmtime.mk:1.21 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/varmod-gmtime.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-gmtime.mk,v 1.21 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: varmod-gmtime.mk,v 1.22 2024/04/20 10:18:55 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: Invalid time value "-1"
+# expect+2: while evaluating "${:L:gmtime=-1} != """: 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: Invalid time value " 1"
+# expect+2: while evaluating "${:L:gmtime= 1} != """: 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: Invalid time value "10000000000000000000000000000000"
+# expect+2: while evaluating "${:L:gmtime=10000000000000000000000000000000} != """: 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: Invalid time value "error"
+# expect+2: while evaluating "${:L:gmtime=error} != """: Invalid time value "error"
# expect+1: Malformed conditional (${:L:gmtime=error} != "")
.if ${:L:gmtime=error} != ""
. error
@@ -139,7 +139,7 @@
# Before var.c 1.1050 from 2023-05-09, the timestamp could be directly
# followed by the next modifier, without a ':' separator. This was the same
# bug as for the ':L' and ':P' modifiers.
-# expect+2: Invalid time value "100000S,1970,bad,"
+# expect+2: while evaluating variable "%Y": Invalid time value "100000S,1970,bad,"
# expect+1: Malformed conditional (${%Y:L:gmtime=100000S,1970,bad,} != "bad")
.if ${%Y:L:gmtime=100000S,1970,bad,} != "bad"
. error
Index: src/usr.bin/make/unit-tests/directive-for.mk
diff -u src/usr.bin/make/unit-tests/directive-for.mk:1.24 src/usr.bin/make/unit-tests/directive-for.mk:1.25
--- src/usr.bin/make/unit-tests/directive-for.mk:1.24 Wed Dec 6 22:28:20 2023
+++ src/usr.bin/make/unit-tests/directive-for.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for.mk,v 1.24 2023/12/06 22:28:20 rillig Exp $
+# $NetBSD: directive-for.mk,v 1.25 2024/04/20 10:18:55 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:Uword2:Z}-after word3": 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/var-eval-short.exp
diff -u src/usr.bin/make/unit-tests/var-eval-short.exp:1.24 src/usr.bin/make/unit-tests/var-eval-short.exp:1.25
--- src/usr.bin/make/unit-tests/var-eval-short.exp:1.24 Sun Apr 14 12:30:47 2024
+++ src/usr.bin/make/unit-tests/var-eval-short.exp Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-make: "var-eval-short.mk" line 46: In the :@ modifier of "", the variable name "${FAIL}" must not contain a dollar
+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: 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-include.mk
diff -u src/usr.bin/make/unit-tests/directive-include.mk:1.13 src/usr.bin/make/unit-tests/directive-include.mk:1.14
--- src/usr.bin/make/unit-tests/directive-include.mk:1.13 Sat Aug 19 10:52:14 2023
+++ src/usr.bin/make/unit-tests/directive-include.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: directive-include.mk,v 1.13 2023/08/19 10:52:14 rillig Exp $
+# $NetBSD: directive-include.mk,v 1.14 2024/04/20 10:18:55 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: Unknown modifier "Z"
+# expect+1: while evaluating "${:U123:Z}.mk": Unknown modifier "Z"
.include "nonexistent${:U123:Z}.mk"
# The traditional include directive is seldom used.
Index: src/usr.bin/make/unit-tests/directive-undef.mk
diff -u src/usr.bin/make/unit-tests/directive-undef.mk:1.13 src/usr.bin/make/unit-tests/directive-undef.mk:1.14
--- src/usr.bin/make/unit-tests/directive-undef.mk:1.13 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/directive-undef.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: directive-undef.mk,v 1.13 2023/06/01 20:56:35 rillig Exp $
+# $NetBSD: directive-undef.mk,v 1.14 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the .undef directive.
#
@@ -84,7 +84,7 @@ ${DOLLAR}= dollar
#
# As of var.c 1.762, this doesn't happen though because the error handling
# in Var_Parse and Var_Subst is not done properly.
-# expect+1: Unknown modifier "Z"
+# expect+1: while evaluating variable "VARNAMES": Unknown modifier "Z"
.undef ${VARNAMES:L:Z}
Index: src/usr.bin/make/unit-tests/varmod-localtime.exp
diff -u src/usr.bin/make/unit-tests/varmod-localtime.exp:1.13 src/usr.bin/make/unit-tests/varmod-localtime.exp:1.14
--- src/usr.bin/make/unit-tests/varmod-localtime.exp:1.13 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/varmod-localtime.exp Sat Apr 20 10:18:55 2024
@@ -1,12 +1,12 @@
-make: "varmod-localtime.mk" line 61: Invalid time value "-1"
+make: "varmod-localtime.mk" line 61: while evaluating "${:L:localtime=-1} != """: Invalid time value "-1"
make: "varmod-localtime.mk" line 61: Malformed conditional (${:L:localtime=-1} != "")
-make: "varmod-localtime.mk" line 72: Invalid time value " 1"
+make: "varmod-localtime.mk" line 72: while evaluating "${:L:localtime= 1} != """: Invalid time value " 1"
make: "varmod-localtime.mk" line 72: Malformed conditional (${:L:localtime= 1} != "")
-make: "varmod-localtime.mk" line 120: Invalid time value "10000000000000000000000000000000"
+make: "varmod-localtime.mk" line 120: while evaluating "${:L:localtime=10000000000000000000000000000000} != """: Invalid time value "10000000000000000000000000000000"
make: "varmod-localtime.mk" line 120: Malformed conditional (${:L:localtime=10000000000000000000000000000000} != "")
-make: "varmod-localtime.mk" line 133: Invalid time value "error"
+make: "varmod-localtime.mk" line 133: while evaluating "${:L:localtime=error} != """: Invalid time value "error"
make: "varmod-localtime.mk" line 133: Malformed conditional (${:L:localtime=error} != "")
-make: "varmod-localtime.mk" line 144: Invalid time value "100000S,1970,bad,"
+make: "varmod-localtime.mk" line 144: while evaluating variable "%Y": Invalid time value "100000S,1970,bad,"
make: "varmod-localtime.mk" line 144: Malformed conditional (${%Y:L:localtime=100000S,1970,bad,} != "bad")
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/varmod-to-separator.mk
diff -u src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.13 src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.14
--- src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.13 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/varmod-to-separator.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-to-separator.mk,v 1.13 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: varmod-to-separator.mk,v 1.14 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the :ts variable modifier, which joins the words of the variable
# using an arbitrary character as word separator.
@@ -150,7 +150,7 @@ WORDS= one two three four five six
# for an unsigned character though.
#
# Since 2020-11-01, these out-of-bounds values are rejected.
-# expect+2: Invalid character number at "400:tu}"
+# expect+2: while evaluating variable "WORDS": Invalid character number at "400:tu}"
# expect+1: Malformed conditional (${WORDS:[1..3]:ts\400:tu})
.if ${WORDS:[1..3]:ts\400:tu}
. warning The separator \400 is accepted even though it is out of bounds.
@@ -166,7 +166,7 @@ WORDS= one two three four five six
# The hexadecimal number must be in the range of an unsigned char.
#
# Since 2020-11-01, these out-of-bounds values are rejected.
-# expect+2: Invalid character number at "100:tu}"
+# expect+2: while evaluating variable "WORDS": Invalid character number at "100:tu}"
# expect+1: Malformed conditional (${WORDS:[1..3]:ts\x100:tu})
.if ${WORDS:[1..3]:ts\x100:tu}
. warning The separator \x100 is accepted even though it is out of bounds.
@@ -253,7 +253,7 @@ WORDS= one two three four five six
.endif
# Try whether bmake is Unicode-ready.
-# expect+2: Invalid character number at "1F60E}"
+# expect+2: while evaluating "${:Ua b:ts\x1F60E}": 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/lint.exp
diff -u src/usr.bin/make/unit-tests/lint.exp:1.3 src/usr.bin/make/unit-tests/lint.exp:1.4
--- src/usr.bin/make/unit-tests/lint.exp:1.3 Thu Dec 9 20:13:10 2021
+++ src/usr.bin/make/unit-tests/lint.exp Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-make: In the :@ modifier of "VAR", the variable name "${:Ubar:S,b,v,}" must not contain a dollar
+make: in target "mod-loop-varname": while evaluating variable "VAR": In the :@ modifier, the variable name "${:Ubar:S,b,v,}" must not contain a dollar
y@:Q}
xvaluey
exit status 2
Index: src/usr.bin/make/unit-tests/varmod-hash.exp
diff -u src/usr.bin/make/unit-tests/varmod-hash.exp:1.3 src/usr.bin/make/unit-tests/varmod-hash.exp:1.4
--- src/usr.bin/make/unit-tests/varmod-hash.exp:1.3 Tue Feb 23 15:19:41 2021
+++ src/usr.bin/make/unit-tests/varmod-hash.exp Sat Apr 20 10:18:55 2024
@@ -1,9 +1,9 @@
-make: Unknown modifier "has"
+make: in target "all": while evaluating variable "12345": Unknown modifier "has"
26bb0f5f
12345
-make: Unknown modifier "hasX"
+make: in target "all": while evaluating variable "12345": Unknown modifier "hasX"
-make: Unknown modifier "hashed"
+make: in target "all": while evaluating variable "12345": Unknown modifier "hashed"
exit status 0
Index: src/usr.bin/make/unit-tests/varmod-loop-delete.exp
diff -u src/usr.bin/make/unit-tests/varmod-loop-delete.exp:1.3 src/usr.bin/make/unit-tests/varmod-loop-delete.exp:1.4
--- src/usr.bin/make/unit-tests/varmod-loop-delete.exp:1.3 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/varmod-loop-delete.exp Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-make: "varmod-loop-delete.mk" line 20: Cannot delete variable "VAR" while it is used
+make: "varmod-loop-delete.mk" line 20: while evaluating variable "VAR": while evaluating "${:U:@VAR@@} rest of the value": Cannot delete variable "VAR" while it is used
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/varmod-loop-delete.mk
diff -u src/usr.bin/make/unit-tests/varmod-loop-delete.mk:1.3 src/usr.bin/make/unit-tests/varmod-loop-delete.mk:1.4
--- src/usr.bin/make/unit-tests/varmod-loop-delete.mk:1.3 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/varmod-loop-delete.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-loop-delete.mk,v 1.3 2023/06/01 20:56:35 rillig Exp $
+# $NetBSD: varmod-loop-delete.mk,v 1.4 2024/04/20 10:18:55 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: Cannot delete variable "VAR" while it is used
+# expect+1: while evaluating variable "VAR": while evaluating "${:U:@VAR@@} rest of the 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/moderrs.exp
diff -u src/usr.bin/make/unit-tests/moderrs.exp:1.34 src/usr.bin/make/unit-tests/moderrs.exp:1.35
--- src/usr.bin/make/unit-tests/moderrs.exp:1.34 Sun Nov 19 22:32:44 2023
+++ src/usr.bin/make/unit-tests/moderrs.exp Sat Apr 20 10:18:55 2024
@@ -1,11 +1,11 @@
mod-unknown-direct:
want: Unknown modifier 'Z'
-make: Unknown modifier "Z"
+make: in target "mod-unknown-direct": while evaluating variable "VAR": Unknown modifier "Z"
VAR:Z=before--after
mod-unknown-indirect:
want: Unknown modifier 'Z'
-make: Unknown modifier "Z"
+make: in target "mod-unknown-indirect": while evaluating variable "VAR": Unknown modifier "Z"
VAR:Z=before-inner}-after
unclosed-direct:
@@ -119,17 +119,17 @@ then
mod-remember-parse:
1 1 2 3 5 8 13 21 34
-make: Unknown modifier "__"
+make: in target "mod-remember-parse": while evaluating variable "FIB": Unknown modifier "__"
mod-sysv-parse:
-make: Unknown modifier "3"
+make: in target "mod-sysv-parse": while evaluating variable "FIB": Unknown modifier "3"
make: Unclosed expression, expecting '}' for modifier "3" of variable "FIB" with value ""
-make: Unknown modifier "3="
+make: in target "mod-sysv-parse": while evaluating variable "FIB": Unknown modifier "3="
make: Unclosed expression, expecting '}' for modifier "3=" of variable "FIB" with value ""
-make: Unknown modifier "3=x3"
+make: in target "mod-sysv-parse": while evaluating variable "FIB": Unknown modifier "3=x3"
make: Unclosed expression, expecting '}' for modifier "3=x3" of variable "FIB" with value ""
1 1 2 x3 5 8 1x3 21 34
Index: src/usr.bin/make/unit-tests/vardebug.exp
diff -u src/usr.bin/make/unit-tests/vardebug.exp:1.34 src/usr.bin/make/unit-tests/vardebug.exp:1.35
--- src/usr.bin/make/unit-tests/vardebug.exp:1.34 Wed Dec 20 09:46:00 2023
+++ src/usr.bin/make/unit-tests/vardebug.exp Sat Apr 20 10:18:55 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: Unknown modifier "unknown"
+make: "vardebug.mk" line 63: while evaluating "${:Uvariable:unknown}": 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/opt-debug-lint.exp
diff -u src/usr.bin/make/unit-tests/opt-debug-lint.exp:1.18 src/usr.bin/make/unit-tests/opt-debug-lint.exp:1.19
--- src/usr.bin/make/unit-tests/opt-debug-lint.exp:1.18 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/opt-debug-lint.exp Sat Apr 20 10:18:55 2024
@@ -2,9 +2,9 @@ make: "opt-debug-lint.mk" line 21: Varia
make: "opt-debug-lint.mk" line 21: Malformed conditional ($X)
make: "opt-debug-lint.mk" line 45: Variable "UNDEF" is undefined
make: "opt-debug-lint.mk" line 45: Malformed conditional (${UNDEF})
-make: "opt-debug-lint.mk" line 67: Missing delimiter ':' after modifier "L"
-make: "opt-debug-lint.mk" line 67: Missing delimiter ':' after modifier "P"
-make: "opt-debug-lint.mk" line 76: Unknown modifier "${"
+make: "opt-debug-lint.mk" line 67: while evaluating variable "value": Missing delimiter ':' after modifier "L"
+make: "opt-debug-lint.mk" line 67: while evaluating variable "value": Missing delimiter ':' after modifier "P"
+make: "opt-debug-lint.mk" line 76: while evaluating variable "value": Unknown modifier "${"
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/varmod-indirect.mk
diff -u src/usr.bin/make/unit-tests/varmod-indirect.mk:1.18 src/usr.bin/make/unit-tests/varmod-indirect.mk:1.19
--- src/usr.bin/make/unit-tests/varmod-indirect.mk:1.18 Sun Feb 4 10:03:10 2024
+++ src/usr.bin/make/unit-tests/varmod-indirect.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-indirect.mk,v 1.18 2024/02/04 10:03:10 rillig Exp $
+# $NetBSD: varmod-indirect.mk,v 1.19 2024/04/20 10:18:55 rillig Exp $
#
# Tests for indirect variable modifiers, such as in ${VAR:${M_modifiers}}.
# These can be used for very basic purposes like converting a string to either
@@ -15,7 +15,7 @@
# The following expression generates a parse error since its indirect
# modifier contains more than a sole expression.
#
-# expect+1: Unknown modifier "${"
+# expect+1: while evaluating variable "value": Unknown modifier "${"
.if ${value:L:${:US}${:U,value,replacement,}} != "S,value,replacement,}"
. warning unexpected
.endif
@@ -47,7 +47,7 @@
# error. Because of this parse error, this feature cannot be used reasonably
# in practice.
#
-# expect+2: Unknown modifier "${"
+# expect+2: while evaluating variable "value": Unknown modifier "${"
#.MAKEFLAGS: -dvc
.if ${value:L:${:UM*}S,value,replaced,} == "M*S,value,replaced,}"
# expect+1: warning: FIXME: this expression should have resulted in a parse error rather than returning the unparsed portion of the expression.
@@ -160,7 +160,7 @@ M_NoPrimes= ${PRIMES:${M_ListToSkip}}
.endfor
# An error in an indirect modifier.
-# expect+1: Unknown modifier "Z"
+# expect+1: while evaluating variable "UNDEF": Unknown modifier "Z"
.for var in before ${UNDEF:${:UZ}} after
# expect+2: before
# expect+1: after
@@ -191,7 +191,7 @@ _:= before ${UNDEF:${:U}} after
# XXX: This expands to ${UNDEF:Z}, which will behave differently if the
# variable '_' is used in a context where the expression ${_} is
# parsed but not evaluated.
-# expect+1: Unknown modifier "Z"
+# expect+1: while evaluating variable "UNDEF": Unknown modifier "Z"
_:= before ${UNDEF:${:UZ}} after
.MAKEFLAGS: -d0
Index: src/usr.bin/make/unit-tests/varmod-match-escape.exp
diff -u src/usr.bin/make/unit-tests/varmod-match-escape.exp:1.18 src/usr.bin/make/unit-tests/varmod-match-escape.exp:1.19
--- src/usr.bin/make/unit-tests/varmod-match-escape.exp:1.18 Fri Jun 23 04:56:54 2023
+++ src/usr.bin/make/unit-tests/varmod-match-escape.exp Sat Apr 20 10:18:55 2024
@@ -33,9 +33,9 @@ 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: Dollar followed by nothing
-make: "varmod-match-escape.mk" line 110: warning: Unfinished character list in pattern '[A-]' of modifier ':M'
-make: "varmod-match-escape.mk" line 110: warning: Unfinished character list in pattern '[^A-]' of modifier ':M'
+make: "varmod-match-escape.mk" line 69: while evaluating "${:U\$:M\$} != """: Dollar followed by nothing
+make: "varmod-match-escape.mk" line 110: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[A-]' of modifier ':M'
+make: "varmod-match-escape.mk" line 110: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[^A-]' of modifier ':M'
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/var-op-expand.exp
diff -u src/usr.bin/make/unit-tests/var-op-expand.exp:1.8 src/usr.bin/make/unit-tests/var-op-expand.exp:1.9
--- src/usr.bin/make/unit-tests/var-op-expand.exp:1.8 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/var-op-expand.exp Sat Apr 20 10:18:55 2024
@@ -1,6 +1,6 @@
-make: "var-op-expand.mk" line 274: Unknown modifier "s,value,replaced,"
+make: "var-op-expand.mk" line 274: while evaluating variable "indirect": while evaluating variable "later": Unknown modifier "s,value,replaced,"
make: "var-op-expand.mk" line 278: warning: XXX Neither branch should be taken.
-make: "var-op-expand.mk" line 283: Unknown modifier "s,value,replaced,"
+make: "var-op-expand.mk" line 283: while evaluating variable "indirect": while evaluating variable "later": Unknown modifier "s,value,replaced,"
make: "var-op-expand.mk" line 285: warning: XXX Neither branch should be taken.
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/varmod.exp
diff -u src/usr.bin/make/unit-tests/varmod.exp:1.8 src/usr.bin/make/unit-tests/varmod.exp:1.9
--- src/usr.bin/make/unit-tests/varmod.exp:1.8 Sat Feb 3 00:20:23 2024
+++ src/usr.bin/make/unit-tests/varmod.exp Sat Apr 20 10:18:56 2024
@@ -1,7 +1,7 @@
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: Dollar followed by nothing
-make: "varmod.mk" line 117: Missing delimiter ':' after modifier "P"
+make: "varmod.mk" line 107: while evaluating "${:Uword:@word@${word}$@} != "word"": Dollar followed by nothing
+make: "varmod.mk" line 117: while evaluating variable "VAR": Missing delimiter ':' after modifier "P"
make: "varmod.mk" line 119: Missing argument for ".error"
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/var-op-expand.mk
diff -u src/usr.bin/make/unit-tests/var-op-expand.mk:1.19 src/usr.bin/make/unit-tests/var-op-expand.mk:1.20
--- src/usr.bin/make/unit-tests/var-op-expand.mk:1.19 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/var-op-expand.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: var-op-expand.mk,v 1.19 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: var-op-expand.mk,v 1.20 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the := variable assignment operator, which expands its
# right-hand side.
@@ -270,7 +270,7 @@ later= lowercase-value
.undef later
INDIRECT:= ${LATER:S,value,replaced,} OK ${LATER:value=sysv}
indirect:= ${INDIRECT:tl}
-# expect+1: Unknown modifier "s,value,replaced,"
+# expect+1: while evaluating variable "indirect": while evaluating variable "later": Unknown modifier "s,value,replaced,"
.if ${indirect} != " ok "
. error
.else
@@ -279,7 +279,7 @@ indirect:= ${INDIRECT:tl}
.endif
LATER= uppercase-value
later= lowercase-value
-# expect+1: Unknown modifier "s,value,replaced,"
+# expect+1: while evaluating variable "indirect": while evaluating variable "later": Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced ok uppercase-sysv"
# expect+1: warning: XXX Neither branch should be taken.
. warning XXX Neither branch should be taken.
Index: src/usr.bin/make/unit-tests/varmisc.exp
diff -u src/usr.bin/make/unit-tests/varmisc.exp:1.19 src/usr.bin/make/unit-tests/varmisc.exp:1.20
--- src/usr.bin/make/unit-tests/varmisc.exp:1.19 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/varmisc.exp Sat Apr 20 10:18:55 2024
@@ -44,26 +44,26 @@ parse-dynamic: parse-dynamic parse-dynam
parse-dynamic: parse-dynamic parse-dynamic after
parse-dynamic: parse-dynamic parse-dynamic after
varerror-unclosed:begin
-make: Unclosed variable ""
+make: in target "varerror-unclosed": Unclosed variable ""
-make: Unclosed variable "UNCLOSED"
+make: in target "varerror-unclosed": Unclosed variable "UNCLOSED"
-make: Unclosed variable "UNCLOSED"
+make: in target "varerror-unclosed": Unclosed variable "UNCLOSED"
-make: Unclosed variable "PATTERN"
+make: in target "varerror-unclosed": while evaluating variable "UNCLOSED": Unclosed variable "PATTERN"
make: Unclosed expression, expecting '}' for modifier "M${PATTERN" of variable "UNCLOSED" with value ""
-make: Unclosed variable "param"
-make: Unclosed variable "UNCLOSED."
+make: in target "varerror-unclosed": Unclosed variable "param"
+make: in target "varerror-unclosed": Unclosed variable "UNCLOSED."
-make: Unclosed variable "UNCLOSED.1"
+make: in target "varerror-unclosed": Unclosed variable "UNCLOSED.1"
-make: Unclosed variable "UNCLOSED.2"
+make: in target "varerror-unclosed": Unclosed variable "UNCLOSED.2"
-make: Unclosed variable "UNCLOSED.3"
+make: in target "varerror-unclosed": Unclosed variable "UNCLOSED.3"
-make: Unclosed variable "UNCLOSED_ORIG"
+make: in target "varerror-unclosed": while evaluating variable "UNCLOSED_INDIR_2": while evaluating variable "UNCLOSED_INDIR_1": Unclosed variable "UNCLOSED_ORIG"
varerror-unclosed:end
target1-flags: we have: one two
Index: src/usr.bin/make/unit-tests/varmod-assign.exp
diff -u src/usr.bin/make/unit-tests/varmod-assign.exp:1.19 src/usr.bin/make/unit-tests/varmod-assign.exp:1.20
--- src/usr.bin/make/unit-tests/varmod-assign.exp:1.19 Sun Jan 7 11:42:22 2024
+++ src/usr.bin/make/unit-tests/varmod-assign.exp Sat Apr 20 10:18:55 2024
@@ -42,7 +42,7 @@ mod-assign-empty: value}
make: Bad modifier ":" for variable ""
mod-assign-empty: overwritten}
mod-assign-empty: VAR=overwritten
-make: Unknown modifier ":x"
+make: in target "mod-assign-parse": while evaluating variable "ASSIGN": Unknown modifier ":x"
sysv:y
make: Unfinished modifier for "ASSIGN" ('}' missing)
Index: src/usr.bin/make/unit-tests/varmod-assign.mk
diff -u src/usr.bin/make/unit-tests/varmod-assign.mk:1.19 src/usr.bin/make/unit-tests/varmod-assign.mk:1.20
--- src/usr.bin/make/unit-tests/varmod-assign.mk:1.19 Sun Jan 7 11:42:22 2024
+++ src/usr.bin/make/unit-tests/varmod-assign.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-assign.mk,v 1.19 2024/01/07 11:42:22 rillig Exp $
+# $NetBSD: varmod-assign.mk,v 1.20 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the obscure ::= variable modifiers, which perform variable
# assignments during evaluation, just like the = operator in C.
@@ -90,7 +90,7 @@ mod-assign-empty:
mod-assign-parse:
# The modifier for assignment operators starts with a ':'.
# An 'x' after that is an invalid modifier.
- # expect: make: Unknown modifier ":x"
+ # expect: make: in target "mod-assign-parse": while evaluating variable "ASSIGN": Unknown modifier ":x"
@echo ${ASSIGN::x}
# When parsing an assignment operator fails because the operator is
Index: src/usr.bin/make/unit-tests/varmod-edge.mk
diff -u src/usr.bin/make/unit-tests/varmod-edge.mk:1.19 src/usr.bin/make/unit-tests/varmod-edge.mk:1.20
--- src/usr.bin/make/unit-tests/varmod-edge.mk:1.19 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/varmod-edge.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-edge.mk,v 1.19 2023/11/19 22:06:15 rillig Exp $
+# $NetBSD: varmod-edge.mk,v 1.20 2024/04/20 10:18:55 rillig Exp $
#
# Tests for edge cases in variable modifiers.
#
@@ -162,8 +162,8 @@ MOD.colons= ${INP.colons::::}
EXP.colons= # empty
.for test in ${TESTS}
-# expect+2: Unknown modifier ":"
-# expect+1: Unknown modifier ":"
+# expect+2: while evaluating variable "MOD.colons": while evaluating variable "INP.colons": Unknown modifier ":"
+# expect+1: while evaluating variable "MOD.colons": while evaluating variable "INP.colons": Unknown modifier ":"
. if ${MOD.${test}} == ${EXP.${test}}
# expect+16: ok M-paren
# expect+15: ok M-mixed
@@ -191,7 +191,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: Unknown modifier "Z"
+# expect+1: while evaluating "${:Z}": Unknown modifier "Z"
.if ${:Z}
. error
.else
Index: src/usr.bin/make/unit-tests/varmod-ifelse.exp
diff -u src/usr.bin/make/unit-tests/varmod-ifelse.exp:1.19 src/usr.bin/make/unit-tests/varmod-ifelse.exp:1.20
--- src/usr.bin/make/unit-tests/varmod-ifelse.exp:1.19 Sun Dec 10 20:12:28 2023
+++ src/usr.bin/make/unit-tests/varmod-ifelse.exp Sat Apr 20 10:18:55 2024
@@ -16,7 +16,7 @@ CondParser_Eval: ${VAR} == value
Comparing "value" == "value"
Comparing "ok" != "ok"
make: "varmod-ifelse.mk" line 158: no.
-make: "varmod-ifelse.mk" line 162: Comparison with '>=' requires both operands 'no' and '10' to be numeric
+make: "varmod-ifelse.mk" line 162: while evaluating variable "string == "literal" || no >= 10": Comparison with '>=' requires both operands 'no' and '10' to be numeric
make: Bad conditional expression 'string == "literal" || no >= 10' before '?yes:no'
make: "varmod-ifelse.mk" line 162: .
make: Bad conditional expression 'string == "literal" && >= 10' before '?yes:no'
Index: src/usr.bin/make/unit-tests/varmod-ifelse.mk
diff -u src/usr.bin/make/unit-tests/varmod-ifelse.mk:1.26 src/usr.bin/make/unit-tests/varmod-ifelse.mk:1.27
--- src/usr.bin/make/unit-tests/varmod-ifelse.mk:1.26 Sun Dec 10 20:12:28 2023
+++ src/usr.bin/make/unit-tests/varmod-ifelse.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-ifelse.mk,v 1.26 2023/12/10 20:12:28 rillig Exp $
+# $NetBSD: varmod-ifelse.mk,v 1.27 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the ${cond:?then:else} variable modifier, which evaluates either
# the then-expression or the else-expression, depending on the condition.
@@ -156,7 +156,7 @@ STRING= string
NUMBER= no # not really a number
# expect+1: no.
.info ${${STRING} == "literal" && ${NUMBER} >= 10:?yes:no}.
-# expect+3: Comparison with '>=' requires both operands 'no' and '10' to be numeric
+# expect+3: while evaluating variable "string == "literal" || no >= 10": Comparison with '>=' requires both operands 'no' and '10' to be numeric
# expect: make: Bad conditional expression 'string == "literal" || no >= 10' before '?yes:no'
# expect+1: .
.info ${${STRING} == "literal" || ${NUMBER} >= 10:?yes:no}.
Index: src/usr.bin/make/unit-tests/varmod-indirect.exp
diff -u src/usr.bin/make/unit-tests/varmod-indirect.exp:1.27 src/usr.bin/make/unit-tests/varmod-indirect.exp:1.28
--- src/usr.bin/make/unit-tests/varmod-indirect.exp:1.27 Sun Feb 4 10:03:10 2024
+++ src/usr.bin/make/unit-tests/varmod-indirect.exp Sat Apr 20 10:18:55 2024
@@ -1,5 +1,5 @@
-make: "varmod-indirect.mk" line 19: Unknown modifier "${"
-make: "varmod-indirect.mk" line 52: Unknown modifier "${"
+make: "varmod-indirect.mk" line 19: while evaluating variable "value": Unknown modifier "${"
+make: "varmod-indirect.mk" line 52: while evaluating variable "value": Unknown modifier "${"
make: "varmod-indirect.mk" line 54: warning: FIXME: this expression should have resulted in a parse error rather than returning the unparsed portion of the expression.
make: "varmod-indirect.mk" line 143: before
make: "varmod-indirect.mk" line 143: after
@@ -7,7 +7,7 @@ make: "varmod-indirect.mk" line 151: bef
make: "varmod-indirect.mk" line 151: after
make: "varmod-indirect.mk" line 159: before
make: "varmod-indirect.mk" line 159: after
-make: "varmod-indirect.mk" line 164: Unknown modifier "Z"
+make: "varmod-indirect.mk" line 164: while evaluating variable "UNDEF": Unknown modifier "Z"
make: "varmod-indirect.mk" line 167: before
make: "varmod-indirect.mk" line 167: after
Parsing line 176: _:= before ${UNDEF} after
@@ -31,7 +31,7 @@ Parsing line 195: _:= before ${UNDEF:${:
Var_Parse: ${UNDEF:${:UZ}} after (eval-keep-dollar-and-undefined)
Indirect modifier "Z" from "${:UZ}"
Evaluating modifier ${UNDEF:Z} on value "" (eval-keep-dollar-and-undefined, undefined)
-make: "varmod-indirect.mk" line 195: Unknown modifier "Z"
+make: "varmod-indirect.mk" line 195: while evaluating variable "UNDEF": Unknown modifier "Z"
Result of ${UNDEF:Z} is error (eval-keep-dollar-and-undefined, undefined)
Global: _ = before ${UNDEF:Z} after
Parsing line 197: .MAKEFLAGS: -d0
Index: src/usr.bin/make/unit-tests/varmod-localtime.mk
diff -u src/usr.bin/make/unit-tests/varmod-localtime.mk:1.14 src/usr.bin/make/unit-tests/varmod-localtime.mk:1.15
--- src/usr.bin/make/unit-tests/varmod-localtime.mk:1.14 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/varmod-localtime.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-localtime.mk,v 1.14 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: varmod-localtime.mk,v 1.15 2024/04/20 10:18:55 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: Invalid time value "-1"
+# expect+2: while evaluating "${:L:localtime=-1} != """: 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: Invalid time value " 1"
+# expect+2: while evaluating "${:L:localtime= 1} != """: 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: Invalid time value "10000000000000000000000000000000"
+# expect+2: while evaluating "${:L:localtime=10000000000000000000000000000000} != """: 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: Invalid time value "error"
+# expect+2: while evaluating "${:L:localtime=error} != """: Invalid time value "error"
# expect+1: Malformed conditional (${:L:localtime=error} != "")
.if ${:L:localtime=error} != ""
. error
@@ -139,7 +139,7 @@
# Before var.c 1.1050 from 2023-05-09, the timestamp could be directly
# followed by the next modifier, without a ':' separator. This was the same
# bug as for the ':L' and ':P' modifiers.
-# expect+2: Invalid time value "100000S,1970,bad,"
+# expect+2: while evaluating variable "%Y": Invalid time value "100000S,1970,bad,"
# expect+1: Malformed conditional (${%Y:L:localtime=100000S,1970,bad,} != "bad")
.if ${%Y:L:localtime=100000S,1970,bad,} != "bad"
. error
Index: src/usr.bin/make/unit-tests/varmod-match.exp
diff -u src/usr.bin/make/unit-tests/varmod-match.exp:1.14 src/usr.bin/make/unit-tests/varmod-match.exp:1.15
--- src/usr.bin/make/unit-tests/varmod-match.exp:1.14 Sun Dec 17 23:19:02 2023
+++ src/usr.bin/make/unit-tests/varmod-match.exp Sat Apr 20 10:18:55 2024
@@ -1,13 +1,13 @@
-make: "varmod-match.mk" line 289: warning: Unfinished character list in pattern 'a[' of modifier ':M'
-make: "varmod-match.mk" line 297: warning: Unfinished character list in pattern 'a[^' of modifier ':M'
-make: "varmod-match.mk" line 305: warning: Unfinished character list in pattern '[-x1-3' of modifier ':M'
-make: "varmod-match.mk" line 313: warning: Unfinished character list in pattern '*[-x1-3' of modifier ':M'
-make: "varmod-match.mk" line 322: warning: Unfinished character list in pattern '[^-x1-3' of modifier ':M'
-make: "varmod-match.mk" line 336: warning: Unfinished character list in pattern '?[\' of modifier ':M'
-make: "varmod-match.mk" line 344: warning: Unfinished character range in pattern '[x-' of modifier ':M'
-make: "varmod-match.mk" line 356: warning: Unfinished character range in pattern '[^x-' of modifier ':M'
-make: "varmod-match.mk" line 364: warning: Unfinished character list in pattern '[' of modifier ':M'
-make: "varmod-match.mk" line 364: Unknown modifier "]"
+make: "varmod-match.mk" line 289: while evaluating variable "WORDS": warning: Unfinished character list in pattern 'a[' of modifier ':M'
+make: "varmod-match.mk" line 297: while evaluating variable "WORDS": warning: Unfinished character list in pattern 'a[^' of modifier ':M'
+make: "varmod-match.mk" line 305: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[-x1-3' of modifier ':M'
+make: "varmod-match.mk" line 313: while evaluating variable "WORDS": warning: Unfinished character list in pattern '*[-x1-3' of modifier ':M'
+make: "varmod-match.mk" line 322: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[^-x1-3' of modifier ':M'
+make: "varmod-match.mk" line 336: while evaluating variable "WORDS": warning: Unfinished character list in pattern '?[\' of modifier ':M'
+make: "varmod-match.mk" line 344: while evaluating variable "WORDS": warning: Unfinished character range in pattern '[x-' of modifier ':M'
+make: "varmod-match.mk" line 356: while evaluating variable "WORDS": warning: Unfinished character range in pattern '[^x-' of modifier ':M'
+make: "varmod-match.mk" line 364: while evaluating variable " : :: ": warning: Unfinished character list in pattern '[' of modifier ':M'
+make: "varmod-match.mk" line 364: while evaluating variable " : :: ": Unknown modifier "]"
make: "varmod-match.mk" line 364: Malformed conditional (${ ${:U\:} ${:U\:\:} :L:M[:]} != ":")
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/varmod-loop-varname.exp
diff -u src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.6 src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.7
--- src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.6 Thu Jun 1 20:56:35 2023
+++ src/usr.bin/make/unit-tests/varmod-loop-varname.exp Sat Apr 20 10:18:55 2024
@@ -1,10 +1,10 @@
-make: "varmod-loop-varname.mk" line 18: In the :@ modifier of "", 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+"": 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: In the :@ modifier of "1 2 3", the variable name "v$" must not contain a dollar
+make: "varmod-loop-varname.mk" line 89: while evaluating variable "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)")
-make: "varmod-loop-varname.mk" line 96: In the :@ modifier of "1 2 3", the variable name "v$$" must not contain a dollar
+make: "varmod-loop-varname.mk" line 96: while evaluating variable "1 2 3": In the :@ modifier, the variable name "v$$" must not contain a dollar
make: "varmod-loop-varname.mk" line 96: Malformed conditional (${1 2 3:L:@v$$@($v)@} != "() () ()")
-make: "varmod-loop-varname.mk" line 103: In the :@ modifier of "1 2 3", the variable name "v$$$" must not contain a dollar
+make: "varmod-loop-varname.mk" line 103: while evaluating variable "1 2 3": In the :@ modifier, the variable name "v$$$" must not contain a dollar
make: "varmod-loop-varname.mk" line 103: Malformed conditional (${1 2 3:L:@v$$$@($v)@} != "() () ()")
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/varmod-loop-varname.mk
diff -u src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.6 src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.7
--- src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.6 Sun Nov 19 21:47:52 2023
+++ src/usr.bin/make/unit-tests/varmod-loop-varname.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-loop-varname.mk,v 1.6 2023/11/19 21:47:52 rillig Exp $
+# $NetBSD: varmod-loop-varname.mk,v 1.7 2024/04/20 10:18:55 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: In the :@ modifier of "", 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+"": 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
@@ -84,21 +84,21 @@ RES3= 3
# There's no point in allowing a dollar sign in that position.
# Since var.c 1.907 from 2021-04-04, a '$' is no longer allowed in the
# variable name.
-# expect+2: In the :@ modifier of "1 2 3", the variable name "v$" must not contain a dollar
+# expect+2: while evaluating variable "1 2 3": In the :@ modifier, the variable name "v$" must not contain a dollar
# expect+1: Malformed conditional (${1 2 3:L:@v$@($v)@} != "(1) (2) (3)")
.if ${1 2 3:L:@v$@($v)@} != "(1) (2) (3)"
. error
.else
. error
.endif
-# expect+2: In the :@ modifier of "1 2 3", the variable name "v$$" must not contain a dollar
+# expect+2: while evaluating variable "1 2 3": In the :@ modifier, the variable name "v$$" must not contain a dollar
# expect+1: Malformed conditional (${1 2 3:L:@v$$@($v)@} != "() () ()")
.if ${1 2 3:L:@v$$@($v)@} != "() () ()"
. error
.else
. error
.endif
-# expect+2: In the :@ modifier of "1 2 3", the variable name "v$$$" must not contain a dollar
+# expect+2: while evaluating variable "1 2 3": In the :@ modifier, the variable name "v$$$" must not contain a dollar
# expect+1: Malformed conditional (${1 2 3:L:@v$$$@($v)@} != "() () ()")
.if ${1 2 3:L:@v$$$@($v)@} != "() () ()"
. error
Index: src/usr.bin/make/unit-tests/varmod-subst-regex.exp
diff -u src/usr.bin/make/unit-tests/varmod-subst-regex.exp:1.6 src/usr.bin/make/unit-tests/varmod-subst-regex.exp:1.7
--- src/usr.bin/make/unit-tests/varmod-subst-regex.exp:1.6 Mon Jun 21 08:17:39 2021
+++ src/usr.bin/make/unit-tests/varmod-subst-regex.exp Sat Apr 20 10:18:55 2024
@@ -20,7 +20,7 @@ mod-regex-limits:22-ok:1 33 556
mod-regex-limits:capture:ihgfedcbaabcdefghijABCDEFGHIJa0a1a2rest
make: Regex compilation error: (details omitted)
mod-regex-errors:
-make: Unknown modifier "Z"
+make: in target "mod-regex-errors": while evaluating variable "word": while evaluating "${:U:Z}y,W}": 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-match.mk
diff -u src/usr.bin/make/unit-tests/varmod-match.mk:1.20 src/usr.bin/make/unit-tests/varmod-match.mk:1.21
--- src/usr.bin/make/unit-tests/varmod-match.mk:1.20 Sun Dec 17 23:19:02 2023
+++ src/usr.bin/make/unit-tests/varmod-match.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-match.mk,v 1.20 2023/12/17 23:19:02 rillig Exp $
+# $NetBSD: varmod-match.mk,v 1.21 2024/04/20 10:18:55 rillig Exp $
#
# Tests for the ':M' modifier, which keeps only those words that match the
# given pattern.
@@ -285,7 +285,7 @@ ${:U*}= asterisk
# [ Incomplete empty character list, never matches.
WORDS= a a[
-# expect+1: warning: Unfinished character list in pattern 'a[' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern 'a[' of modifier ':M'
.if ${WORDS:Ma[} != ""
. error
.endif
@@ -293,7 +293,7 @@ WORDS= a a[
# [^ Incomplete negated empty character list, matches any single
# character.
WORDS= a a[ aX
-# expect+1: warning: Unfinished character list in pattern 'a[^' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern 'a[^' of modifier ':M'
.if ${WORDS:Ma[^} != "a[ aX"
. error
.endif
@@ -301,7 +301,7 @@ WORDS= a a[ aX
# [-x1-3 Incomplete character list, matches those elements that can be
# parsed without lookahead.
WORDS= - + x xx 0 1 2 3 4 [x1-3
-# expect+1: warning: Unfinished character list in pattern '[-x1-3' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[-x1-3' of modifier ':M'
.if ${WORDS:M[-x1-3} != "- x 1 2 3"
. error
.endif
@@ -309,7 +309,7 @@ WORDS= - + x xx 0 1 2 3 4 [x1-3
# *[-x1-3 Incomplete character list after a wildcard, matches those
# words that end with one of the characters from the list.
WORDS= - + x xx 0 1 2 3 4 00 01 10 11 000 001 010 011 100 101 110 111 [x1-3
-# expect+1: warning: Unfinished character list in pattern '*[-x1-3' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern '*[-x1-3' of modifier ':M'
.if ${WORDS:M*[-x1-3} != "- x xx 1 2 3 01 11 001 011 101 111 [x1-3"
. warning ${WORDS:M*[-x1-3}
.endif
@@ -318,7 +318,7 @@ WORDS= - + x xx 0 1 2 3 4 00 01 10 11 0
# Incomplete negated character list, matches any character
# except those elements that can be parsed without lookahead.
WORDS= - + x xx 0 1 2 3 4 [x1-3
-# expect+1: warning: Unfinished character list in pattern '[^-x1-3' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern '[^-x1-3' of modifier ':M'
.if ${WORDS:M[^-x1-3} != "+ 0 4"
. error
.endif
@@ -332,7 +332,7 @@ WORDS= - + x xx 0 1 2 3 4 [x1-3
# '\', as there is no following space that could be escaped.
WORDS= \\ \a ${:Ux\\}
PATTERN= ${:U?[\\}
-# expect+1: warning: Unfinished character list in pattern '?[\' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character list in pattern '?[\' of modifier ':M'
.if ${WORDS:M${PATTERN}} != "\\\\ x\\"
. error
.endif
@@ -340,7 +340,7 @@ PATTERN= ${:U?[\\}
# [x- Incomplete character list containing an incomplete character
# range, matches only the 'x'.
WORDS= [x- x x- y
-# expect+1: warning: Unfinished character range in pattern '[x-' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character range in pattern '[x-' of modifier ':M'
.if ${WORDS:M[x-} != "x"
. error
.endif
@@ -352,14 +352,14 @@ WORDS= [x- x x- y
# XXX: Even matches strings that are longer than a single
# character.
WORDS= [x- x x- y yyyyy
-# expect+1: warning: Unfinished character range in pattern '[^x-' of modifier ':M'
+# expect+1: while evaluating variable "WORDS": warning: Unfinished character range in pattern '[^x-' of modifier ':M'
.if ${WORDS:M[^x-} != "[x- y yyyyy"
. error
.endif
# [:] matches never since the ':' starts the next modifier
-# expect+3: warning: Unfinished character list in pattern '[' of modifier ':M'
-# expect+2: Unknown modifier "]"
+# expect+3: while evaluating variable " : :: ": warning: Unfinished character list in pattern '[' of modifier ':M'
+# expect+2: while evaluating variable " : :: ": Unknown modifier "]"
# expect+1: Malformed conditional (${ ${:U\:} ${:U\:\:} :L:M[:]} != ":")
.if ${ ${:U\:} ${:U\:\:} :L:M[:]} != ":"
. error
Index: src/usr.bin/make/unit-tests/varmod-range.mk
diff -u src/usr.bin/make/unit-tests/varmod-range.mk:1.10 src/usr.bin/make/unit-tests/varmod-range.mk:1.11
--- src/usr.bin/make/unit-tests/varmod-range.mk:1.10 Sun Dec 17 14:07:22 2023
+++ src/usr.bin/make/unit-tests/varmod-range.mk Sat Apr 20 10:18:55 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-range.mk,v 1.10 2023/12/17 14:07:22 rillig Exp $
+# $NetBSD: varmod-range.mk,v 1.11 2024/04/20 10:18:55 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: Invalid number "x}Rest" != "Rest"" for ':range' modifier
+# expect+2: while evaluating "${:U:range=x}Rest" != "Rest"": 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: Unknown modifier "x0"
+# expect+2: while evaluating "${:U:range=0x0}Rest" != "Rest"": Unknown modifier "x0"
# expect+1: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
.if "${:U:range=0x0}Rest" != "Rest"
. error
@@ -91,7 +91,7 @@
#.endif
# modifier name too short
-# expect+2: Unknown modifier "rang"
+# expect+2: while evaluating variable "a b c": Unknown modifier "rang"
# expect+1: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
.if "${a b c:L:rang}Rest" != "Rest"
. error
@@ -100,7 +100,7 @@
.endif
# misspelled modifier name
-# expect+2: Unknown modifier "rango"
+# expect+2: while evaluating variable "a b c": Unknown modifier "rango"
# expect+1: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
.if "${a b c:L:rango}Rest" != "Rest"
. error
@@ -109,7 +109,7 @@
.endif
# modifier name too long
-# expect+2: Unknown modifier "ranger"
+# expect+2: while evaluating variable "a b c": Unknown modifier "ranger"
# expect+1: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
.if "${a b c:L:ranger}Rest" != "Rest"
. error
Index: src/usr.bin/make/unit-tests/varmod.mk
diff -u src/usr.bin/make/unit-tests/varmod.mk:1.10 src/usr.bin/make/unit-tests/varmod.mk:1.11
--- src/usr.bin/make/unit-tests/varmod.mk:1.10 Sat Feb 3 00:20:23 2024
+++ src/usr.bin/make/unit-tests/varmod.mk Sat Apr 20 10:18:56 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varmod.mk,v 1.10 2024/02/03 00:20:23 sjg Exp $
+# $NetBSD: varmod.mk,v 1.11 2024/04/20 10:18:56 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: Dollar followed by nothing
+# expect+1: while evaluating "${:Uword:@word@${word}$@} != "word"": Dollar followed by nothing
.if ${:Uword:@word@${word}$@} != "word"
. error
.endif
@@ -113,7 +113,7 @@ DOLLAR2= ${:U\$}
# XXX: The .error should not be reached since the expression is
# malformed, and this error should be propagated up to Cond_EvalLine.
VAR= STOP
-# expect+1: Missing delimiter ':' after modifier "P"
+# expect+1: while evaluating variable "VAR": Missing delimiter ':' after modifier "P"
.if ${VAR:P=RE} != "STORE"
# expect+1: Missing argument for ".error"
. error
Index: src/usr.bin/make/unit-tests/varparse-errors.exp
diff -u src/usr.bin/make/unit-tests/varparse-errors.exp:1.10 src/usr.bin/make/unit-tests/varparse-errors.exp:1.11
--- src/usr.bin/make/unit-tests/varparse-errors.exp:1.10 Sun Nov 19 22:06:15 2023
+++ src/usr.bin/make/unit-tests/varparse-errors.exp Sat Apr 20 10:18:56 2024
@@ -1,5 +1,5 @@
-make: "varparse-errors.mk" line 38: Unknown modifier "Z"
-make: "varparse-errors.mk" line 47: Unknown modifier "Z"
+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: Bad modifier ":OX" for variable ""
make: "varparse-errors.mk" line 71: Undefined variable "${:U:OX"
make: Bad modifier ":OX" for variable ""