bug78015.phpt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. --TEST--
  2. Bug #78015: Incorrect evaluation of expressions involving partials array in SCCP
  3. --EXTENSIONS--
  4. opcache
  5. --FILE--
  6. <?php
  7. $x = 1;
  8. function test1() {
  9. global $x;
  10. $a = ['b' => [$x], 'c' => [$x]];
  11. $d = $a['b'] + $a['c'];
  12. return $d;
  13. }
  14. function test2() {
  15. global $x;
  16. $a = ['b' => [$x]];
  17. $d = !$a['b'];
  18. return $d;
  19. }
  20. function test3() {
  21. global $x;
  22. $a = ['b' => [$x]];
  23. $d = (int) $a['b'];
  24. return $d;
  25. }
  26. function test4() {
  27. global $x;
  28. $a = ['b' => [$x]];
  29. $d = $a['b'] ?: 42;
  30. return $d;
  31. }
  32. function test5() {
  33. global $x;
  34. $a = ['b' => [$x]];
  35. $d = is_array($a['b']);
  36. return $d;
  37. }
  38. function test6() {
  39. global $x;
  40. $a = ['b' => [$x]];
  41. $b = "foo";
  42. $d = "$a[b]{$b}bar";
  43. return $d;
  44. }
  45. function test7() {
  46. global $x;
  47. $a = ['b' => [$x]];
  48. $y = 1;
  49. foreach ($a['b'] as $_) {
  50. $y = 2;
  51. }
  52. return $y;
  53. }
  54. function test8($array) {
  55. $i = 0;
  56. $ret = [[]];
  57. foreach ($array as $_) {
  58. $i++;
  59. $ret = [[
  60. 'x' => 0,
  61. 'y' => $i,
  62. ]];
  63. }
  64. return $ret[0];
  65. }
  66. function test9() {
  67. global $x;
  68. $a = ['b' => [$x]];
  69. return serialize($a['b']);
  70. }
  71. var_dump(test1());
  72. var_dump(test2());
  73. var_dump(test3());
  74. var_dump(test4());
  75. var_dump(test5());
  76. var_dump(test6());
  77. var_dump(test7());
  78. var_dump(test8([1]));
  79. var_dump(test9());
  80. ?>
  81. --EXPECTF--
  82. array(1) {
  83. [0]=>
  84. int(1)
  85. }
  86. bool(false)
  87. int(1)
  88. array(1) {
  89. [0]=>
  90. int(1)
  91. }
  92. bool(true)
  93. Warning: Array to string conversion in %s on line %d
  94. string(11) "Arrayfoobar"
  95. int(2)
  96. array(2) {
  97. ["x"]=>
  98. int(0)
  99. ["y"]=>
  100. int(1)
  101. }
  102. string(14) "a:1:{i:0;i:1;}"