Skip to content

Commit

Permalink
Merge branch 'PHP-8.2' into PHP-8.3
Browse files Browse the repository at this point in the history
* PHP-8.2:
  Fix lineno in function redeclaration error
  • Loading branch information
iluuu1994 committed Oct 22, 2024
2 parents ce99ade + de7ef3f commit 381e020
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 3 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ PHP NEWS
. Fixed bug GH-16371 (Assertion failure in Zend/zend_weakrefs.c:646). (Arnaud)
. Fixed bug GH-16515 (Incorrect propagation of ZEND_ACC_RETURN_REFERENCE for
call trampoline). (ilutov)
. Fixed bug GH-16509 (Incorrect line number in function redeclaration error).
(ilutov)

- Curl:
. Fixed bug GH-16302 (CurlMultiHandle holds a reference to CurlHandle if
Expand Down
7 changes: 7 additions & 0 deletions Zend/tests/gh16509.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

function test() {


echo 'foo';
}
11 changes: 11 additions & 0 deletions Zend/tests/gh16509.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--TEST--
GH-16509: Incorrect lineno reported for function redeclaration
--FILE--
<?php

include __DIR__ . '/gh16509.inc';
include __DIR__ . '/gh16509.inc';

?>
--EXPECTF--
Fatal error: Cannot redeclare test() (previously declared in %sgh16509.inc:3) in %sgh16509.inc on line 3
3 changes: 2 additions & 1 deletion Zend/zend_compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -1202,7 +1202,7 @@ static zend_never_inline ZEND_COLD ZEND_NORETURN void do_bind_function_error(zen
zend_error_noreturn(error_level, "Cannot redeclare %s() (previously declared in %s:%d)",
op_array ? ZSTR_VAL(op_array->function_name) : ZSTR_VAL(old_function->common.function_name),
ZSTR_VAL(old_function->op_array.filename),
old_function->op_array.opcodes[0].lineno);
old_function->op_array.line_start);
} else {
zend_error_noreturn(error_level, "Cannot redeclare %s()",
op_array ? ZSTR_VAL(op_array->function_name) : ZSTR_VAL(old_function->common.function_name));
Expand Down Expand Up @@ -7684,6 +7684,7 @@ static void zend_compile_func_decl(znode *result, zend_ast *ast, bool toplevel)
} else if (toplevel) {
/* Only register the function after a successful compile */
if (UNEXPECTED(zend_hash_add_ptr(CG(function_table), lcname, op_array) == NULL)) {
CG(zend_lineno) = decl->start_lineno;
do_bind_function_error(lcname, op_array, true);
}
}
Expand Down
4 changes: 2 additions & 2 deletions ext/opcache/zend_accelerator_util_funcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,13 @@ static zend_always_inline void _zend_accel_function_hash_copy(HashTable *target,
function2 = Z_PTR_P(t);
CG(in_compilation) = 1;
zend_set_compiled_filename(function1->op_array.filename);
CG(zend_lineno) = function1->op_array.opcodes[0].lineno;
CG(zend_lineno) = function1->op_array.line_start;
if (function2->type == ZEND_USER_FUNCTION
&& function2->op_array.last > 0) {
zend_error(E_ERROR, "Cannot redeclare %s() (previously declared in %s:%d)",
ZSTR_VAL(function1->common.function_name),
ZSTR_VAL(function2->op_array.filename),
(int)function2->op_array.opcodes[0].lineno);
(int)function2->op_array.line_start);
} else {
zend_error(E_ERROR, "Cannot redeclare %s()", ZSTR_VAL(function1->common.function_name));
}
Expand Down

0 comments on commit 381e020

Please sign in to comment.