This does not print the exact line of the comma, but rather the line
of the previous element. This should generally be "good enough", as
the line number is close (off by one) to the actual issue now.
Previously it would point to the start of the array, which may be
very far away.
--- /dev/null
+--TEST--
+Bug #75426: "Cannot use empty array elements" reports wrong position
+--FILE--
+<?php
+$a = [
+ 1,
+ 2,
+ 3,
+ ,
+ 5,
+ 6,
+];
+?>
+--EXPECTF--
+Fatal error: Cannot use empty array elements in arrays in %s on line 5
static zend_bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */
{
zend_ast_list *list = zend_ast_get_list(ast);
+ zend_ast *last_elem_ast = NULL;
uint32_t i;
zend_bool is_constant = 1;
zend_ast *elem_ast = list->child[i];
if (elem_ast == NULL) {
+ /* Report error at line of last non-empty element */
+ if (last_elem_ast) {
+ CG(zend_lineno) = zend_ast_get_lineno(last_elem_ast);
+ }
zend_error(E_COMPILE_ERROR, "Cannot use empty array elements in arrays");
}
) {
is_constant = 0;
}
+
+ last_elem_ast = elem_ast;
}
if (!is_constant) {