Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make/unit-tests make(1): document undefined behavior...
details: https://anonhg.NetBSD.org/src/rev/4af517ec13e1
branches: trunk
changeset: 946726:4af517ec13e1
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Dec 06 20:55:30 2020 +0000
description:
make(1): document undefined behavior from 2014
Earlier versions of make didn't know the -v option to print the expanded
value of a variable. To make the test runnable by older makes as well,
switch to -V instead, which has been available much longer.
diffstat:
usr.bin/make/unit-tests/opt-file.mk | 25 ++++++++++++++++++++++---
1 files changed, 22 insertions(+), 3 deletions(-)
diffs (48 lines):
diff -r 64d59df1baf9 -r 4af517ec13e1 usr.bin/make/unit-tests/opt-file.mk
--- a/usr.bin/make/unit-tests/opt-file.mk Sun Dec 06 20:33:44 2020 +0000
+++ b/usr.bin/make/unit-tests/opt-file.mk Sun Dec 06 20:55:30 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: opt-file.mk,v 1.6 2020/12/06 20:33:44 rillig Exp $
+# $NetBSD: opt-file.mk,v 1.7 2020/12/06 20:55:30 rillig Exp $
#
# Tests for the -f command line option.
@@ -12,9 +12,28 @@
#
# In the unlikely case where a file ends in a backslash instead of a newline,
# that backslash is trimmed. See ParseGetLine.
+#
+# make-2014.01.01.00.00.00 invoked undefined behavior, reading text from
+# outside of the file buffer.
+#
+# printf '%s' 'VAR=value\' \
+# | MALLOC_OPTIONS=JA make-2014.01.01.00.00.00 -r -f - -V VAR -dA 2>&1 \
+# | less
+#
+# The debug output shows how make happily uses freshly allocated memory (the
+# <A5>) and already freed memory ('Z').
+#
+# ParseReadLine (1): 'VAR=value\<A5><A5><A5><A5><A5><A5>'
+# Global:VAR = value\<A5><A5><A5><A5><A5><A5>value\<A5><A5><A5><A5><A5><A5>
+# ParseReadLine (2): 'alue\<A5><A5><A5><A5><A5><A5>'
+# ParseDoDependency(alue\<A5><A5><A5><A5><A5><A5>)
+# make-2014.01.01.00.00.00: "(stdin)" line 2: Need an operator
+# ParseReadLine (3): '<A5><A5><A5>ZZZZZZZZZZZZZZZZ'
+# ParseDoDependency(<A5><A5><A5>ZZZZZZZZZZZZZZZZ)
+#
file-ending-in-backslash: .PHONY
@printf '%s' 'VAR=value\' \
- | ${MAKE} -r -f - -v VAR
+ | ${MAKE} -r -f - -V VAR
# If a file contains null bytes, the rest of the line is skipped, and parsing
# continues in the next line. Throughout the history of make, the behavior
@@ -61,7 +80,7 @@
file-containing-null-byte: .PHONY
@printf '%s\n' 'VAR=value' 'VAR2=VALUE2' \
| tr 'l' '\0' \
- | ${MAKE} -r -f - -v VAR -v VAR2
+ | ${MAKE} -r -f - -V VAR -V VAR2
all:
: Making ${.TARGET}
Home |
Main Index |
Thread Index |
Old Index