summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-02-19 09:45:41 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-02-19 09:45:41 +0100
commit28a30f7afa41034eefaf67a0a50c23a3ad6e257b (patch)
tree0c254e633992f4c3fb98fbc9c1d2c9356f3130e7
parent736b22dc0b2fc36e9bd87f2ee5af8c4b2be9fd3d (diff)
downloadphp-git-28a30f7afa41034eefaf67a0a50c23a3ad6e257b.tar.gz
Handle static return type in AST printer
Fixes OSS-Fuzz #20782.
-rw-r--r--Zend/tests/assert/expect_015.phpt16
-rw-r--r--Zend/zend_ast.c1
2 files changed, 9 insertions, 8 deletions
diff --git a/Zend/tests/assert/expect_015.phpt b/Zend/tests/assert/expect_015.phpt
index 9b2cabd59f..21ff636f92 100644
--- a/Zend/tests/assert/expect_015.phpt
+++ b/Zend/tests/assert/expect_015.phpt
@@ -119,7 +119,7 @@ assert(0 && ($a = function &(array &...$a) {
}
}));
-assert(0 && ($a = function () {
+assert(0 && ($a = function (): ?static {
declare(C=1) { echo 1; }
$x = '\'"`$a';
$x = "'\"`$a";
@@ -160,7 +160,7 @@ Warning: assert(): assert(0 && ($a = function () {
$y = clone $x;
yield 1 => 2;
yield from $x;
-})) failed in %sexpect_015.php on line %d
+})) failed in %s on line %d
Warning: assert(): assert(0 && ($a = function &(array &$a, ?X $b = null) use($c, &$d): ?X {
abstract class A extends B implements C, D {
@@ -202,7 +202,7 @@ Warning: assert(): assert(0 && ($a = function &(array &$a, ?X $b = null) use($c,
}
-})) failed in %sexpect_015.php on line %d
+})) failed in %s on line %d
Warning: assert(): assert(0 && ($a = function &(array &$a, X $b = null, int|float $c) use($c, &$d): X {
final class A {
@@ -242,7 +242,7 @@ Warning: assert(): assert(0 && ($a = function &(array &$a, X $b = null, int|floa
}
-})) failed in %sexpect_015.php on line %d
+})) failed in %s on line %d
Warning: assert(): assert(0 && ($a = function &(?array &$a, X $b = null) use($c, &$d): X {
class A {
@@ -255,7 +255,7 @@ Warning: assert(): assert(0 && ($a = function &(?array &$a, X $b = null) use($c,
use T3;
}
-})) failed in %sexpect_015.php on line %d
+})) failed in %s on line %d
Warning: assert(): assert(0 && ($a = function &(array &...$a) {
declare(A = 1, B = 2);
@@ -268,9 +268,9 @@ Warning: assert(): assert(0 && ($a = function &(array &...$a) {
} finally {
echo 3;
}
-})) failed in %sexpect_015.php on line %d
+})) failed in %s on line %d
-Warning: assert(): assert(0 && ($a = function () {
+Warning: assert(): assert(0 && ($a = function (): ?static {
declare(C = 1) {
echo 1;
}
@@ -296,4 +296,4 @@ Warning: assert(): assert(0 && ($a = function () {
if ($a) {
} else {
}
-})) failed in %sexpect_015.php on line %d
+})) failed in %s on line %d
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index c88e6658ed..7cfc0450fd 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -1571,6 +1571,7 @@ simple_list:
switch (ast->attr & ~ZEND_TYPE_NULLABLE) {
case IS_ARRAY: APPEND_STR("array");
case IS_CALLABLE: APPEND_STR("callable");
+ case IS_STATIC: APPEND_STR("static");
EMPTY_SWITCH_DEFAULT_CASE();
}
break;