Date: Thu, 9 Dec 2021 23:57:19 +0000 From: "Roland Illig" <ril...@netbsd.org> Message-ID: <20211209235719.cde20f...@cvs.netbsd.org>
| Log Message: | tests/make: prevent the bug from cond.c 1.283 from happening again This new test (while OK of itself) would not have done that. I suspect this test would have passed with that broken version. The actual condition that failed was (effectively) .if 1 && (defined(VAR) || ${VAR} != "string") not .if 0 In that, the "i &&" part is largely irrelevant, you didn't touch && parsing in the change that broke things, just || parsing, so implementing a test that tests short circuit eval of && will not help (this one, it could help others). This is actually not a good text of short circuit eval of && though, it is complicated by the complex (and breakable, as seen) condition on the rhs, better would be .if defined(VAR) && ${VAR} == "yes" or something simple like that. With simple tests for basic short circuit eval, you can then add tests for more complex cases .if 1 && 1 && defined(VAR) && ${VAR} == "yes" (and similar for ||), and after those pass, tests for various complicated combinations of || and && (all with something relying on short circuit eval to verify that things are not tested which should not be). kre