diff --git a/tools/build/make_check/Makefile b/tools/build/make_check/Makefile index 0ae687e51c09..bf26b446a83e 100644 --- a/tools/build/make_check/Makefile +++ b/tools/build/make_check/Makefile @@ -41,6 +41,9 @@ all: @echo "Running test funny_targets" @${MAKE} funny_targets || ${MAKE} failure @echo "PASS: Test funny_targets detected no regression." + @echo "Running test arith_expr" + @${MAKE} arith_expr || ${MAKE} failure + @echo "PASS: Test arith_expr detected no regression." .if make(double) # Doubly-defined targets. make(1) will warn, but use the "right" one. If it @@ -90,6 +93,15 @@ colons::target: exclamation!target: .endif +.if make(arith_expr) +arith_expr: +# See if arithmetic expression parsing is broken. +# The different spacing below is intentional. +VALUE= 0 +.if (${VALUE} < 0)||(${VALUE}>0) +.endif +.endif + failure: @echo "FAIL: Test failed: regression detected. See above." @false diff --git a/tools/regression/usr.bin/make/Makefile b/tools/regression/usr.bin/make/Makefile index 0ae687e51c09..bf26b446a83e 100644 --- a/tools/regression/usr.bin/make/Makefile +++ b/tools/regression/usr.bin/make/Makefile @@ -41,6 +41,9 @@ all: @echo "Running test funny_targets" @${MAKE} funny_targets || ${MAKE} failure @echo "PASS: Test funny_targets detected no regression." + @echo "Running test arith_expr" + @${MAKE} arith_expr || ${MAKE} failure + @echo "PASS: Test arith_expr detected no regression." .if make(double) # Doubly-defined targets. make(1) will warn, but use the "right" one. If it @@ -90,6 +93,15 @@ colons::target: exclamation!target: .endif +.if make(arith_expr) +arith_expr: +# See if arithmetic expression parsing is broken. +# The different spacing below is intentional. +VALUE= 0 +.if (${VALUE} < 0)||(${VALUE}>0) +.endif +.endif + failure: @echo "FAIL: Test failed: regression detected. See above." @false diff --git a/usr.bin/make/cond.c b/usr.bin/make/cond.c index 6f82ecbee3ea..8eab811f6317 100644 --- a/usr.bin/make/cond.c +++ b/usr.bin/make/cond.c @@ -688,16 +688,13 @@ do_string_compare: } } else { char *c = CondCvtArg(rhs, &right); - if (*c != '\0' && !isspace((unsigned char) *c)) + if (c == rhs) goto do_string_compare; if (rhs == condExpr) { /* * Skip over the right-hand side */ - while(!isspace((unsigned char) *condExpr) && - (*condExpr != '\0')) { - condExpr++; - } + condExpr = c; } }