Module Name:    src
Committed By:   rillig
Date:           Tue Jan 19 17:49:13 UTC 2021

Modified Files:
        src/usr.bin/make: cond.c
        src/usr.bin/make/unit-tests: cond-op-not.exp cond-op-not.mk
            cond-op-parentheses.exp cond-op-parentheses.mk

Log Message:
make(1): demonstrate wrong return value in CondParser_Term


To generate a diff of this commit:
cvs rdiff -u -r1.235 -r1.236 src/usr.bin/make/cond.c
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/cond-op-not.exp \
    src/usr.bin/make/unit-tests/cond-op-parentheses.mk
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-op-not.mk
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/cond-op-parentheses.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/cond.c
diff -u src/usr.bin/make/cond.c:1.235 src/usr.bin/make/cond.c:1.236
--- src/usr.bin/make/cond.c:1.235	Sun Jan 10 21:20:46 2021
+++ src/usr.bin/make/cond.c	Tue Jan 19 17:49:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: cond.c,v 1.235 2021/01/10 21:20:46 rillig Exp $	*/
+/*	$NetBSD: cond.c,v 1.236 2021/01/19 17:49:13 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.235 2021/01/10 21:20:46 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.236 2021/01/19 17:49:13 rillig Exp $");
 
 /*
  * The parsing of conditional expressions is based on this grammar:
@@ -949,6 +949,12 @@ CondParser_Term(CondParser *par, Boolean
 			t = TOK_TRUE;
 		}
 	}
+
+	/*
+	 * FIXME: Can at least return TOK_AND, TOK_OR, TOK_RPAREN, maybe
+	 *  others as well.
+	 */
+	/* TODO: assert(t == TOK_ERROR); */
 	return t;
 }
 

Index: src/usr.bin/make/unit-tests/cond-op-not.exp
diff -u src/usr.bin/make/unit-tests/cond-op-not.exp:1.3 src/usr.bin/make/unit-tests/cond-op-not.exp:1.4
--- src/usr.bin/make/unit-tests/cond-op-not.exp:1.3	Sun Nov 15 14:58:14 2020
+++ src/usr.bin/make/unit-tests/cond-op-not.exp	Tue Jan 19 17:49:13 2021
@@ -3,4 +3,7 @@ make: "cond-op-not.mk" line 37: Not spac
 make: "cond-op-not.mk" line 41: Not 0 evaluates to true.
 make: "cond-op-not.mk" line 49: Not 1 evaluates to false.
 make: "cond-op-not.mk" line 55: Not word evaluates to false.
-exit status 0
+make: "cond-op-not.mk" line 59: Malformed conditional (!)
+make: Fatal errors encountered -- cannot continue
+make: stopped in unit-tests
+exit status 1
Index: src/usr.bin/make/unit-tests/cond-op-parentheses.mk
diff -u src/usr.bin/make/unit-tests/cond-op-parentheses.mk:1.3 src/usr.bin/make/unit-tests/cond-op-parentheses.mk:1.4
--- src/usr.bin/make/unit-tests/cond-op-parentheses.mk:1.3	Sun Nov 15 14:58:14 2020
+++ src/usr.bin/make/unit-tests/cond-op-parentheses.mk	Tue Jan 19 17:49:13 2021
@@ -1,4 +1,4 @@
-# $NetBSD: cond-op-parentheses.mk,v 1.3 2020/11/15 14:58:14 rillig Exp $
+# $NetBSD: cond-op-parentheses.mk,v 1.4 2021/01/19 17:49:13 rillig Exp $
 #
 # Tests for parentheses in .if conditions.
 
@@ -15,5 +15,22 @@
 .  error
 .endif
 
+# An unbalanced opening parenthesis is a parse error.
+.if (
+.  error
+.else
+.  error
+.endif
+
+# An unbalanced closing parenthesis is a parse error.
+#
+# As of 2021-01-19, CondParser_Term returned TOK_RPAREN even though this
+# function promised to only ever return TOK_TRUE, TOK_FALSE or TOK_ERROR.
+.if )
+.  error
+.else
+.  error
+.endif
+
 all:
 	@:;

Index: src/usr.bin/make/unit-tests/cond-op-not.mk
diff -u src/usr.bin/make/unit-tests/cond-op-not.mk:1.6 src/usr.bin/make/unit-tests/cond-op-not.mk:1.7
--- src/usr.bin/make/unit-tests/cond-op-not.mk:1.6	Sun Nov 15 14:58:14 2020
+++ src/usr.bin/make/unit-tests/cond-op-not.mk	Tue Jan 19 17:49:13 2021
@@ -1,4 +1,4 @@
-# $NetBSD: cond-op-not.mk,v 1.6 2020/11/15 14:58:14 rillig Exp $
+# $NetBSD: cond-op-not.mk,v 1.7 2021/01/19 17:49:13 rillig Exp $
 #
 # Tests for the ! operator in .if conditions, which negates its argument.
 
@@ -55,5 +55,12 @@
 .  info Not word evaluates to false.
 .endif
 
+# A single exclamation mark is a parse error.
+.if !
+.  error
+.else
+.  error
+.endif
+
 all:
 	@:;

Index: src/usr.bin/make/unit-tests/cond-op-parentheses.exp
diff -u src/usr.bin/make/unit-tests/cond-op-parentheses.exp:1.2 src/usr.bin/make/unit-tests/cond-op-parentheses.exp:1.3
--- src/usr.bin/make/unit-tests/cond-op-parentheses.exp:1.2	Sun Nov 15 14:58:14 2020
+++ src/usr.bin/make/unit-tests/cond-op-parentheses.exp	Tue Jan 19 17:49:13 2021
@@ -1,2 +1,6 @@
 make: "cond-op-parentheses.mk" line 13: Parentheses can be nested at least to depth 112.
-exit status 0
+make: "cond-op-parentheses.mk" line 19: Malformed conditional (()
+make: "cond-op-parentheses.mk" line 29: Malformed conditional ())
+make: Fatal errors encountered -- cannot continue
+make: stopped in unit-tests
+exit status 1

Reply via email to