← Commit list

5f8daefb8

Denys Vlasenko
Denys Vlasenko
2014-06-26
SUCCESS Duration: 135s

Subject

awk: fix handling of "if ... break ; else ..." - closes 7226

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

editors/awk.c+2 -0
@@ -1540,12 +1540,14 @@ static void chain_group(void)
debug_printf_parse("%s: OC_BREAK\n", __func__);
n = chain_node(OC_EXEC);
n->a.n = break_ptr;
+ chain_expr(t_info);
break;
case OC_CONTINUE:
debug_printf_parse("%s: OC_CONTINUE\n", __func__);
n = chain_node(OC_EXEC);
n->a.n = continue_ptr;
+ chain_expr(t_info);
break;
/* delete, next, nextfile, return, exit */
testsuite/awk.tests+16 -0
@@ -295,6 +295,22 @@ testing "awk -e and ARGC" \
""
SKIP=
+# The examples are in fact not valid awk programs (break/continue
+# can only be used inside loops).
+# But we do accept them outside of loops.
+# We had a bug with misparsing "break ; else" sequence.
+# Test that *that* bug is fixed, using simplest possible scripts:
+testing "awk break" \
+ "awk -f - 2>&1; echo \$?" \
+ "0\n" \
+ "" \
+ 'BEGIN { if (1) break; else a = 1 }'
+testing "awk continue" \
+ "awk -f - 2>&1; echo \$?" \
+ "0\n" \
+ "" \
+ 'BEGIN { if (1) continue; else a = 1 }'
+
# testing "description" "command" "result" "infile" "stdin"
exit $FAILCOUNT