Module Name: src
Committed By: rillig
Date: Thu Jun 1 06:25:34 UTC 2023
Modified Files:
src/usr.bin/make: parse.c
src/usr.bin/make/unit-tests: directive-for-break.exp
directive-for-break.mk
Log Message:
make: error out on a .break directive with arguments
To generate a diff of this commit:
cvs rdiff -u -r1.698 -r1.699 src/usr.bin/make/parse.c
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/directive-for-break.exp
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/directive-for-break.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/parse.c
diff -u src/usr.bin/make/parse.c:1.698 src/usr.bin/make/parse.c:1.699
--- src/usr.bin/make/parse.c:1.698 Wed May 10 16:10:02 2023
+++ src/usr.bin/make/parse.c Thu Jun 1 06:25:34 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.698 2023/05/10 16:10:02 rillig Exp $ */
+/* $NetBSD: parse.c,v 1.699 2023/06/01 06:25:34 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.698 2023/05/10 16:10:02 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.699 2023/06/01 06:25:34 rillig Exp $");
/*
* A file being read.
@@ -2700,10 +2700,14 @@ ParseLine_ShellCommand(const char *p)
}
static void
-HandleBreak(void)
+HandleBreak(const char *arg)
{
IncludedFile *curFile = CurFile();
+ if (arg[0] != '\0')
+ Parse_Error(PARSE_FATAL,
+ "The .break directive does not take arguments");
+
if (curFile->forLoop != NULL) {
/* pretend we reached EOF */
For_Break(curFile->forLoop);
@@ -2742,7 +2746,7 @@ ParseDirective(char *line)
arg = cp;
if (Substring_Equals(dir, "break"))
- HandleBreak();
+ HandleBreak(arg);
else if (Substring_Equals(dir, "undef"))
Var_Undef(arg);
else if (Substring_Equals(dir, "export"))
Index: src/usr.bin/make/unit-tests/directive-for-break.exp
diff -u src/usr.bin/make/unit-tests/directive-for-break.exp:1.2 src/usr.bin/make/unit-tests/directive-for-break.exp:1.3
--- src/usr.bin/make/unit-tests/directive-for-break.exp:1.2 Sat Sep 3 00:50:07 2022
+++ src/usr.bin/make/unit-tests/directive-for-break.exp Thu Jun 1 06:25:34 2023
@@ -1,4 +1,5 @@
-make: "directive-for-break.mk" line 45: break outside of for loop
+make: "directive-for-break.mk" line 47: break outside of for loop
+make: "directive-for-break.mk" line 67: The .break directive does not take arguments
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/directive-for-break.mk
diff -u src/usr.bin/make/unit-tests/directive-for-break.mk:1.3 src/usr.bin/make/unit-tests/directive-for-break.mk:1.4
--- src/usr.bin/make/unit-tests/directive-for-break.mk:1.3 Sat Sep 24 10:52:05 2022
+++ src/usr.bin/make/unit-tests/directive-for-break.mk Thu Jun 1 06:25:34 2023
@@ -1,8 +1,10 @@
-# $NetBSD: directive-for-break.mk,v 1.3 2022/09/24 10:52:05 rillig Exp $
+# $NetBSD: directive-for-break.mk,v 1.4 2023/06/01 06:25:34 rillig Exp $
#
# Tests for .break in .for loops, which immediately terminates processing of
# the surrounding .for loop.
+# expect-all
+
# .break terminates the loop early.
# This is usually done within a conditional.
@@ -58,3 +60,9 @@ COMBINED+= ${outer}-${inner}
. endfor
. endif
.endif
+
+
+.for i in 1
+# expect+1: The .break directive does not take arguments
+. break 1
+.endfor