Bug #69091 [NEW]: assign by reference and math
| From: | rstoll at tutteli dot ch | Date: | Fri, 20 Feb 2015 15:17:09 +0000 |
| Subject: | Bug #69091 [NEW]: assign by reference and math | ||
| Groups: | php.standards | ||
| Request: | Send a blank email to standards-+get-724@lists.php.net to get a copy of this message | ||
From: rstoll at tutteli dot ch
Operating system:
PHP version: 5.6.6
Package: PHP Language Specification
Bug Type: Bug
Bug description:assign by reference and math
Description:
------------
assign by reference in conjunction with arithmetic does not result in a
syntax error as expected. The test script shows two examples. The first
one is correct according to the current implementation, but should
result in a parser error IMO. The second results in a parser error (how
it should be).
It seems like the parser has a wrong precedence. I think the problem is
this line in the grammar:
http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_language_parser.y#777
The langspec does not mention operator precedence explicitly (which
should be added IMO) but implicitly the =& operator can be found in the
section "Assignment Operator"
(https://github.com/php/php-langspec/blob/b1e7a65fb9c985a8114322330468b77fb955cfae/spec/19-grammar.md#assignment-operators)
which is further below than +
Test script:
---------------
$a = &$a + 1;
$a = 1 + &$a;
Expected result:
----------------
parser error in both cases or the precedence explanation needs to be
changed.
Reading the spec I would assume the first line in the code above is
equivalent to:
$a = (&$a + 1);
and not
($a = &$a) + 1;
--
Edit bug report at https://bugs.php.net/bug.php?id=69091&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=69091&r=trysnapshot54
Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=69091&r=trysnapshot55
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=69091&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=69091&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=69091&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=69091&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=69091&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=69091&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=69091&r=support
Expected behavior: https://bugs.php.net/fix.php?id=69091&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=69091&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=69091&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=69091&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=69091&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=69091&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=69091&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=69091&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=69091&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=69091&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=69091&r=mysqlcfg