make(1): demonstrate another unnecessary condition evaluation

This commit is contained in:
rillig 2020-07-02 10:36:58 +00:00
parent 4db2f9236b
commit 84868c179c
2 changed files with 16 additions and 1 deletions

View File

@ -1,6 +1,9 @@
expected and expected and
expected and exists expected and exists
expected and empty expected and empty
unexpected VAR U11
expected U23 condition
expected VAR23
expected or expected or
expected or exists expected or exists
expected or empty expected or empty

View File

@ -1,4 +1,4 @@
# $NetBSD: cond-short.mk,v 1.2 2020/06/28 11:06:26 rillig Exp $ # $NetBSD: cond-short.mk,v 1.3 2020/07/02 10:36:58 rillig Exp $
# #
# Demonstrates that in conditions, the right-hand side of an && or || # Demonstrates that in conditions, the right-hand side of an && or ||
# is only evaluated if it can actually influence the result. # is only evaluated if it can actually influence the result.
@ -27,6 +27,18 @@
.if 1 && empty(${echo "expected and empty" 1>&2 :L:sh}) .if 1 && empty(${echo "expected and empty" 1>&2 :L:sh})
.endif .endif
# FIXME: "VAR U11" must not be evaluated.
# The whole !empty condition must only be parsed and then discarded.
VAR= ${VAR${:U11${echo "unexpected VAR U11" 1>&2 :L:sh}}}
VAR13= ${VAR${:U12${echo "unexpected VAR13" 1>&2 :L:sh}}}
.if 0 && !empty(VAR${:U13${echo "unexpected U13 condition" 1>&2 :L:sh}})
.endif
VAR= ${VAR${:U21${echo "unexpected VAR U21" 1>&2 :L:sh}}}
VAR23= ${VAR${:U22${echo "expected VAR23" 1>&2 :L:sh}}}
.if 1 && !empty(VAR${:U23${echo "expected U23 condition" 1>&2 :L:sh}})
.endif
# The || operator. # The || operator.
.if 1 || ${echo "unexpected or" 1>&2 :L:sh} .if 1 || ${echo "unexpected or" 1>&2 :L:sh}