From c94d70434ff518aaa79f5133e12d3a74b0b663b5 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Fri, 4 Jul 2003 13:33:48 +0000 Subject: [PATCH] Fixed broken arithmetic expression parser. Reminded by: bde In memory of: alane --- tools/build/make_check/Makefile | 12 ++++++++++++ tools/regression/usr.bin/make/Makefile | 12 ++++++++++++ usr.bin/make/cond.c | 7 ++----- 3 files changed, 26 insertions(+), 5 deletions(-) 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; } }