From: Ilija Tovilo Date: Sat, 5 Sep 2020 14:33:22 +0000 (+0200) Subject: Adjust assignment line number for match X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8a49310f4e1aae962aaecc8bfafaf39877167c52;p=php Adjust assignment line number for match Otherwise the assignment will have the same number as the default arm which will 1. mis-trigger a breakpoint and 2. mark the line as covered even when it isn't. Closes GH-6083 --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7eb2d79fe7..5d1c4a6207 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3063,6 +3063,7 @@ void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ zend_delayed_compile_var(&var_node, var_ast, BP_VAR_W, 0); zend_compile_expr(&expr_node, expr_ast); zend_delayed_compile_end(offset); + CG(zend_lineno) = zend_ast_get_lineno(var_ast); zend_emit_op_tmp(result, ZEND_ASSIGN, &var_node, &expr_node); return; case ZEND_AST_STATIC_PROP: diff --git a/sapi/phpdbg/tests/match_breakpoints_001.phpt b/sapi/phpdbg/tests/match_breakpoints_001.phpt new file mode 100644 index 0000000000..9ef74179c1 --- /dev/null +++ b/sapi/phpdbg/tests/match_breakpoints_001.phpt @@ -0,0 +1,30 @@ +--TEST-- +Test match default breakpoint with variable assignment +--INI-- +opcache.enable_cli=0 +--PHPDBG-- +b 5 +b 10 +r +q +--EXPECTF-- +[Successful compilation of %s.php] +prompt> [Breakpoint #0 added at %s.php:5] +prompt> [Breakpoint #1 added at %s.php:10] +prompt> [Breakpoint #1 at %s.php:10, hits: 1] +>00010: default => 'bar', // breakpoint #1 + 00011: }; + 00012: +prompt> +--FILE-- + 'foo', + default => 'bar', // breakpoint #0 +}; + +$foo = match (1) { + 0 => 'foo', + default => 'bar', // breakpoint #1 +}; diff --git a/sapi/phpdbg/tests/match_breakpoints_002.phpt b/sapi/phpdbg/tests/match_breakpoints_002.phpt new file mode 100644 index 0000000000..21b0b4ef3a --- /dev/null +++ b/sapi/phpdbg/tests/match_breakpoints_002.phpt @@ -0,0 +1,32 @@ +--TEST-- +Test match default breakpoint with property assignment +--INI-- +opcache.enable_cli=0 +--PHPDBG-- +b 7 +b 12 +r +q +--EXPECTF-- +[Successful compilation of %s.php] +prompt> [Breakpoint #0 added at %s.php:7] +prompt> [Breakpoint #1 added at %s.php:12] +prompt> [Breakpoint #1 at %s.php:12, hits: 1] +>00012: default => 'bar', // breakpoint #1 + 00013: }; + 00014: +prompt> +--FILE-- +bar = match (0) { + 0 => 'foo', + default => 'bar', // breakpoint #0 +}; + +$foo->bar = match (1) { + 0 => 'foo', + default => 'bar', // breakpoint #1 +}; diff --git a/sapi/phpdbg/tests/match_breakpoints_003.phpt b/sapi/phpdbg/tests/match_breakpoints_003.phpt new file mode 100644 index 0000000000..dbd7eb70ab --- /dev/null +++ b/sapi/phpdbg/tests/match_breakpoints_003.phpt @@ -0,0 +1,32 @@ +--TEST-- +Test match default breakpoint with dim assignment +--INI-- +opcache.enable_cli=0 +--PHPDBG-- +b 7 +b 12 +r +q +--EXPECTF-- +[Successful compilation of %s.php] +prompt> [Breakpoint #0 added at %s.php:7] +prompt> [Breakpoint #1 added at %s.php:12] +prompt> [Breakpoint #1 at %s.php:12, hits: 1] +>00012: default => 'bar', // breakpoint #1 + 00013: }; + 00014: +prompt> +--FILE-- + 'foo', + default => 'bar', // breakpoint #0 +}; + +$foo->bar = match (1) { + 0 => 'foo', + default => 'bar', // breakpoint #1 +}; diff --git a/sapi/phpdbg/tests/match_breakpoints_004.phpt b/sapi/phpdbg/tests/match_breakpoints_004.phpt new file mode 100644 index 0000000000..d59555e692 --- /dev/null +++ b/sapi/phpdbg/tests/match_breakpoints_004.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test match default breakpoint with static variable assignment +--INI-- +opcache.enable_cli=0 +--PHPDBG-- +b 9 +b 14 +r +q +--EXPECTF-- +[Successful compilation of %s.php] +prompt> [Breakpoint #0 added at %s.php:9] +prompt> [Breakpoint #1 added at %s.php:14] +prompt> [Breakpoint #1 at %s.php:14, hits: 1] +>00014: default => 'bar', // breakpoint #1 + 00015: }; + 00016: +prompt> +--FILE-- + 'foo', + default => 'bar', // breakpoint #0 +}; + +Foo::$bar = match (1) { + 0 => 'foo', + default => 'bar', // breakpoint #1 +};