summaryrefslogtreecommitdiff
path: root/unit-tests/varname-empty.mk
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests/varname-empty.mk')
-rwxr-xr-xunit-tests/varname-empty.mk26
1 files changed, 26 insertions, 0 deletions
diff --git a/unit-tests/varname-empty.mk b/unit-tests/varname-empty.mk
new file mode 100755
index 0000000000000..b4ce05c3017b3
--- /dev/null
+++ b/unit-tests/varname-empty.mk
@@ -0,0 +1,26 @@
+# $NetBSD: varname-empty.mk,v 1.5 2020/08/22 21:22:24 rillig Exp $
+#
+# Tests for the special variable with the empty name.
+#
+# The variable "" is not supposed to be assigned any value.
+# This is because it is heavily used in the .for loop expansion,
+# as well as to generate arbitrary strings, as in ${:Ufallback}.
+
+# Until 2020-08-22 it was possible to assign a value to the variable with
+# the empty name, leading to all kinds of unexpected effects.
+?= default
+= assigned # undefined behavior until 2020-08-22
++= appended
+:= subst
+!= echo 'shell-output'
+
+# The .for loop expands the expression ${i} to ${:U1}, ${:U2} and so on.
+# This only works if the variable with the empty name is guaranteed to
+# be undefined.
+.for i in 1 2 3
+NUMBERS+= ${i}
+.endfor
+
+all:
+ @echo out: ${:Ufallback}
+ @echo out: ${NUMBERS}