--EXPECTF--
3
-Fatal error: Uncaught TypeException: Argument 1 passed to foo() must be of the type array, integer given, called in %sarray_type_hint_001.php on line 7 and defined in %sarray_type_hint_001.php:2
+Fatal error: Uncaught TypeError: Argument 1 passed to foo() must be of the type array, integer given, called in %sarray_type_hint_001.php on line 7 and defined in %sarray_type_hint_001.php:2
Stack trace:
- #0 %s(%d): foo()
+ #0 %s(%d): foo(123)
#1 {main}
thrown in %sarray_type_hint_001.php on line 2
echo "Done\n";
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to test() must be an instance of OtherClassName, instance of ClassName given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of OtherClassName, instance of ClassName given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): test()
+ #0 %s(%d): test(Object(ClassName))
#1 {main}
thrown in %s on line %d
ok
ok
-Fatal error: Uncaught TypeException: Argument 1 passed to foo\test5() must be an instance of bar, instance of foo\bar given, called in %sbug42802.php on line %d and defined in %sbug42802.php:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to foo\test5() must be an instance of bar, instance of foo\bar given, called in %sbug42802.php on line %d and defined in %sbug42802.php:%d
Stack trace:
- #0 %s(%d): foo\test5()
+ #0 %s(%d): foo\test5(Object(foo\bar))
#1 {main}
thrown in %sbug42802.php on line %d
$foo->bar($foo); // Ok!
$foo->bar(new \stdclass); // Error, ok!
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to foobar\foo::bar() must be an instance of foobar\foo, instance of stdClass given, called in %sbug43332_1.php on line 10 and defined in %sbug43332_1.php:5
+Fatal error: Uncaught TypeError: Argument 1 passed to foobar\foo::bar() must be an instance of foobar\foo, instance of stdClass given, called in %sbug43332_1.php on line 10 and defined in %sbug43332_1.php:5
Stack trace:
- #0 %s(%d): foobar\foo->bar()
+ #0 %s(%d): foobar\foo->bar(Object(stdClass))
#1 {main}
thrown in %sbug43332_1.php on line 5
int(1)
}
-Fatal error: Uncaught TypeException: Argument 1 passed to a() must be of the type array, null given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to a() must be of the type array, null given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): a()
+ #0 %s(%d): a(NULL)
#1 {main}
thrown in %s on line %d
Warning: Missing argument 1 for {closure}(), called in %s on line %d and defined in %s on line %d
NULL
-Fatal error: Uncaught TypeException: Argument 1 passed to test() must be an instance of Closure, instance of stdClass given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of Closure, instance of stdClass given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): test()
+ #0 %s(%d): test(Object(stdClass))
#1 {main}
thrown in %s on line %d
--EXPECTF--
NULL
-Fatal error: Uncaught TypeException: Argument 1 passed to foo\bar::__construct() must be of the type array, object given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to foo\bar::__construct() must be of the type array, object given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): foo\bar->__construct()
+ #0 %s(%d): foo\bar->__construct(Object(stdClass))
#1 {main}
thrown in %s on line %d
}
NULL
-Fatal error: Uncaught TypeException: Argument 1 passed to foo\bar::__construct() must implement interface foo\foo, instance of stdClass given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to foo\bar::__construct() must implement interface foo\foo, instance of stdClass given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): foo\bar->__construct()
+ #0 %s(%d): foo\bar->__construct(Object(stdClass))
#1 {main}
thrown in %s on line %d
object(baz)#%d (0) {
}
-Fatal error: Uncaught TypeException: Argument 1 passed to foo::testFoo() must be an instance of foo, instance of stdClass given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to foo::testFoo() must be an instance of foo, instance of stdClass given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): foo->testFoo()
+ #0 %s(%d): foo->testFoo(Object(stdClass))
#1 {main}
thrown in %s on line %d
--- /dev/null
-} catch (BaseException $e) {
+ --TEST--
+ Memory leak when returning TMP/VAR with wrong return type
+ --FILE--
+ <?php
+
+ function foo(): stdClass {
+ $a = new stdClass;
+ $b = [];
+ return [$a, $b];
+ }
+
+ try {
+ foo();
++} catch (Error $e) {
+ print $e->getMessage();
+ }
+
+ ?>
+ --EXPECTF--
+ Return value of foo() must be an instance of stdClass, array returned in %s on line %d
// calls within that file should stay strict, despite being included by weak file
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to takes_int() must be of the type integer, float given, called in %sweak_include_strict_2.inc on line 9 and defined in %sweak_include_strict_2.inc:5
+Fatal error: Uncaught TypeError: Argument 1 passed to takes_int() must be of the type integer, float given, called in %sweak_include_strict_2.inc on line 9 and defined in %sweak_include_strict_2.inc:5
Stack trace:
- #0 %s(%d): takes_int()
+ #0 %s(%d): takes_int(1)
#1 %s(%d): require('%s')
#2 {main}
thrown in %sweak_include_strict_2.inc on line 5
function_declared_in_weak_mode(1.0);
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to function_declared_in_weak_mode() must be of the type integer, float given, called in %sstrict_call_weak.php on line 10 and defined in %sstrict_call_weak_2.inc:5
+Fatal error: Uncaught TypeError: Argument 1 passed to function_declared_in_weak_mode() must be of the type integer, float given, called in %sstrict_call_weak.php on line 10 and defined in %sstrict_call_weak_2.inc:5
Stack trace:
- #0 %s(%d): function_declared_in_weak_mode()
+ #0 %s(%d): function_declared_in_weak_mode(1)
#1 {main}
thrown in %sstrict_call_weak_2.inc on line 5
function_declared_in_weak_mode(1.0);
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to function_declared_in_weak_mode() must be of the type integer, float given, called in %sstrict_call_weak_explicit.php on line 10 and defined in %sstrict_call_weak_explicit_2.inc:5
+Fatal error: Uncaught TypeError: Argument 1 passed to function_declared_in_weak_mode() must be of the type integer, float given, called in %sstrict_call_weak_explicit.php on line 10 and defined in %sstrict_call_weak_explicit_2.inc:5
Stack trace:
- #0 %s(%d): function_declared_in_weak_mode()
+ #0 %s(%d): function_declared_in_weak_mode(1)
#1 {main}
thrown in %sstrict_call_weak_explicit_2.inc on line 5
// calls within that file should stay strict, despite being included by weak file
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to takes_int() must be of the type integer, float given, called in %sweak_include_strict_2.inc on line 9 and defined in %sweak_include_strict_2.inc:5
+Fatal error: Uncaught TypeError: Argument 1 passed to takes_int() must be of the type integer, float given, called in %sweak_include_strict_2.inc on line 9 and defined in %sweak_include_strict_2.inc:5
Stack trace:
- #0 %s(%d): takes_int()
+ #0 %s(%d): takes_int(1)
#1 %s(%d): require('%s')
#2 {main}
thrown in %sweak_include_strict_2.inc on line 5
}
}
-Fatal error: Uncaught TypeException: Argument 3 passed to test() must be of the type array, integer given, called in %s:%d
+Fatal error: Uncaught TypeError: Argument 3 passed to test() must be of the type array, integer given, called in %s:%d
Stack trace:
- #0 %s(%d): test(Array, Array)
+ #0 %s(%d): test(Array, Array, 2)
#1 {main}
thrown in %s on line %d
static zend_object_handlers default_exception_handlers;
ZEND_API void (*zend_throw_exception_hook)(zval *ex);
- static zend_class_entry *zend_get_exception_base(zval *object)
++static inline zend_class_entry *zend_get_exception_base(zval *object)
+{
+ return instanceof_function(Z_OBJCE_P(object), default_exception_ce) ? default_exception_ce : error_ce;
+}
+
void zend_exception_set_previous(zend_object *exception, zend_object *add_previous)
{
zval tmp, *previous, zv, *pzv, rv;
uint32_t num = 0;
DEFAULT_0_PARAMS;
+
+ object = getThis();
+ base_ce = zend_get_exception_base(object);
- trace = zend_read_property(base_ce, getThis(), "trace", sizeof("trace")-1, 1, &rv);
- trace = zend_read_property(base_exception_ce, getThis(), "trace", sizeof("trace")-1, 1, &rv);
++ trace = zend_read_property(base_ce, object, "trace", sizeof("trace")-1, 1, &rv);
if (Z_TYPE_P(trace) != IS_ARRAY) {
RETURN_FALSE;
}
* Because the lexing itself doesn't do that for us
*/
if (end != yytext + yyleng) {
- zend_throw_exception(zend_get_parse_exception(), "Invalid numeric literal", E_PARSE);
+ zend_throw_exception(zend_get_parse_error(), "Invalid numeric literal", E_PARSE);
- return T_ERROR;
+ RETURN_TOKEN(T_ERROR);
}
} else {
errno = 0;
}
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
- zend_throw_exception(zend_get_parse_exception(),
+ zend_throw_exception(zend_get_parse_error(),
"Invalid numeric literal", E_PARSE);
- return T_ERROR;
+ RETURN_TOKEN(T_ERROR);
}
ZEND_ASSERT(!errno);
- return T_DNUMBER;
+ RETURN_TOKEN(T_DNUMBER);
}
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
- zend_throw_exception(zend_get_parse_exception(), "Invalid numeric literal", E_PARSE);
+ zend_throw_exception(zend_get_parse_error(), "Invalid numeric literal", E_PARSE);
- return T_ERROR;
+ RETURN_TOKEN(T_ERROR);
}
}
ZEND_ASSERT(!errno);
* Because the lexing itself doesn't do that for us
*/
if (end != yytext + yyleng) {
- zend_throw_exception(zend_get_parse_exception(), "Invalid numeric literal", E_PARSE);
+ zend_throw_exception(zend_get_parse_error(), "Invalid numeric literal", E_PARSE);
- return T_ERROR;
+ RETURN_TOKEN(T_ERROR);
}
} else {
errno = 0;
}
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
- zend_throw_exception(zend_get_parse_exception(),
+ zend_throw_exception(zend_get_parse_error(),
"Invalid numeric literal", E_PARSE);
- return T_ERROR;
+ RETURN_TOKEN(T_ERROR);
}
ZEND_ASSERT(!errno);
- return T_DNUMBER;
+ RETURN_TOKEN(T_DNUMBER);
}
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
- zend_throw_exception(zend_get_parse_exception(), "Invalid numeric literal", E_PARSE);
+ zend_throw_exception(zend_get_parse_error(), "Invalid numeric literal", E_PARSE);
- return T_ERROR;
+ RETURN_TOKEN(T_ERROR);
}
}
ZEND_ASSERT(!errno);
--- /dev/null
-Fatal error: Uncaught EngineException: Call to undefined method SplMinHeap::notexist() in %s%ebug69737.php:%d
+ --TEST--
+ Bug #69737 (Segfault when SplMinHeap::compare produces fatal error)
+ --FILE--
+ <?php
+ class SplMinHeap1 extends SplMinHeap {
+ public function compare($a, $b) {
+ return -parent::notexist($a, $b);
+ }
+ }
+ $h = new SplMinHeap1();
+ $h->insert(1);
+ $h->insert(6);
+ ?>
+ ===DONE===
+ --EXPECTF--
++Fatal error: Uncaught Error: Call to undefined method SplMinHeap::notexist() in %s%ebug69737.php:%d
+ Stack trace:
+ #0 [internal function]: SplMinHeap1->compare(1, 6)
+ #1 %s%ebug69737.php(%d): SplHeap->insert(6)
+ #2 {main}
+ thrown in %s%ebug69737.php on line %d
--- /dev/null
-} catch (ParseException $e) {
+ --TEST--
+ Parse errors during token_get_all() with TOKEN_PARSE flag
+ --SKIPIF--
+ <?php if (!extension_loaded("tokenizer")) print "skip"; ?>
+ --FILE--
+ <?php
+
+ try {
+ token_get_all('<?php invalid code;', TOKEN_PARSE);
++} catch (ParseError $e) {
+ echo $e->getMessage(), PHP_EOL;
+ }
+
+ echo "Done";
+
+ ?>
+ --EXPECT--
+ syntax error, unexpected 'code' (T_STRING)
+ Done
f(new stdClass);
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to f() must be an instance of UndefClass, instance of stdClass given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of UndefClass, instance of stdClass given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): f()
+ #0 %s(%d): f(Object(stdClass))
#1 {main}
thrown in %s on line %d
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to FooBar::a() must implement interface Foo, instance of Blort given, called in %s on line 27 and defined in %s:12
+Fatal error: Uncaught TypeError: Argument 1 passed to FooBar::a() must implement interface Foo, instance of Blort given, called in %s on line 27 and defined in %s:12
Stack trace:
- #0 %s(%d): FooBar->a()
+ #0 %s(%d): FooBar->a(Object(Blort))
#1 {main}
thrown in %s on line 12
$o->a($o);
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to Foo::a() must be an instance of NonExisting, instance of Foo given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to Foo::a() must be an instance of NonExisting, instance of Foo given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): Foo->a()
+ #0 %s(%d): Foo->a(Object(Foo))
#1 {main}
thrown in %s on line %d
int(25)
}
-Fatal error: Uncaught TypeException: Argument 1 passed to Test::f1() must be of the type array, integer given, called in %s on line %d and defined in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to Test::f1() must be of the type array, integer given, called in %s on line %d and defined in %s:%d
Stack trace:
- #0 %s(%d): Test::f1()
+ #0 %s(%d): Test::f1(1)
#1 {main}
thrown in %s on line %d
object(foo)#%d (0) {
}
-Fatal error: Uncaught TypeException: Argument 1 passed to typehint() must be an instance of foo, integer given in %s:%d
+Fatal error: Uncaught TypeError: Argument 1 passed to typehint() must be an instance of foo, integer given in %s:%d
Stack trace:
- #0 [internal function]: typehint(1)
+ #0 [internal function]: typehint(1, 1)
#1 %s(%d): array_walk(Array, 'typehint')
#2 {main}
thrown in %s on line %d
echo "ALIVE!\n";
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to blah() must be an instance of Foo, instance of stdClass given, called in %scatchable_error_001.php on line 15 and defined in %scatchable_error_001.php:5
+Fatal error: Uncaught TypeError: Argument 1 passed to blah() must be an instance of Foo, instance of stdClass given, called in %scatchable_error_001.php on line 15 and defined in %scatchable_error_001.php:5
Stack trace:
- #0 %s(%d): blah()
+ #0 %s(%d): blah(Object(stdClass))
#1 {main}
thrown in %scatchable_error_001.php on line 5
?>
--EXPECTF--
-Fatal error: Uncaught TypeException: Argument 1 passed to type_hint_foo() must be an instance of Foo, instance of Bar given, called in %s on line 16 and defined in %s:9
+Fatal error: Uncaught TypeError: Argument 1 passed to type_hint_foo() must be an instance of Foo, instance of Bar given, called in %s on line 16 and defined in %s:9
Stack trace:
- #0 %s(%d): type_hint_foo()
+ #0 %s(%d): type_hint_foo(Object(Bar))
#1 {main}
thrown in %s on line 9