Module Name: src
Committed By: rillig
Date: Thu Jan 21 14:08:09 UTC 2021
Modified Files:
src/usr.bin/make: cond.c
src/usr.bin/make/unit-tests: cond-token-plain.exp cond-token-plain.mk
Log Message:
make(1): demonstrate parse error without error message in conditional
To generate a diff of this commit:
cvs rdiff -u -r1.246 -r1.247 src/usr.bin/make/cond.c
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-token-plain.exp
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/make/unit-tests/cond-token-plain.mk
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/make/cond.c
diff -u src/usr.bin/make/cond.c:1.246 src/usr.bin/make/cond.c:1.247
--- src/usr.bin/make/cond.c:1.246 Thu Jan 21 13:51:24 2021
+++ src/usr.bin/make/cond.c Thu Jan 21 14:08:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: cond.c,v 1.246 2021/01/21 13:51:24 rillig Exp $ */
+/* $NetBSD: cond.c,v 1.247 2021/01/21 14:08:09 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -95,7 +95,7 @@
#include "dir.h"
/* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: cond.c,v 1.246 2021/01/21 13:51:24 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.247 2021/01/21 14:08:09 rillig Exp $");
/*
* The parsing of conditional expressions is based on this grammar:
@@ -467,8 +467,16 @@ CondParser_String(CondParser *par, Boole
&str);
/* TODO: handle errors */
if (str.str == var_Error) {
- if (parseResult == VPR_ERR)
+ if (parseResult == VPR_ERR) {
+ /*
+ * FIXME: Even if an error occurs,
+ * there is no guarantee that it is
+ * reported.
+ *
+ * See cond-token-plain.mk $$$$$$$$.
+ */
par->printedError = TRUE;
+ }
/*
* XXX: Can there be any situation in which
* a returned var_Error requires freeIt?
Index: src/usr.bin/make/unit-tests/cond-token-plain.exp
diff -u src/usr.bin/make/unit-tests/cond-token-plain.exp:1.6 src/usr.bin/make/unit-tests/cond-token-plain.exp:1.7
--- src/usr.bin/make/unit-tests/cond-token-plain.exp:1.6 Thu Jan 21 13:52:32 2021
+++ src/usr.bin/make/unit-tests/cond-token-plain.exp Thu Jan 21 14:08:09 2021
@@ -49,6 +49,7 @@ CondParser_Eval: \\
make: "cond-token-plain.mk" line 168: Now the variable '\\' is defined.
CondParser_Eval: "unquoted\"quoted" != unquoted"quoted
lhs = "unquoted"quoted", rhs = "unquoted"quoted", op = !=
+CondParser_Eval: $$$$$$$$ != ""
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/cond-token-plain.mk
diff -u src/usr.bin/make/unit-tests/cond-token-plain.mk:1.9 src/usr.bin/make/unit-tests/cond-token-plain.mk:1.10
--- src/usr.bin/make/unit-tests/cond-token-plain.mk:1.9 Thu Jan 21 13:52:32 2021
+++ src/usr.bin/make/unit-tests/cond-token-plain.mk Thu Jan 21 14:08:09 2021
@@ -1,4 +1,4 @@
-# $NetBSD: cond-token-plain.mk,v 1.9 2021/01/21 13:52:32 rillig Exp $
+# $NetBSD: cond-token-plain.mk,v 1.10 2021/01/21 14:08:09 rillig Exp $
#
# Tests for plain tokens (that is, string literals without quotes)
# in .if conditions.
@@ -177,6 +177,14 @@ ${:U\\\\}= backslash
. error
.endif
+# FIXME: In CondParser_String, Var_Parse returns var_Error without a
+# corresponding error message.
+.if $$$$$$$$ != ""
+. error
+.else
+. error
+.endif
+
# See cond-token-string.mk for similar tests where the condition is enclosed
# in "quotes".