mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
This test has two classes that use the same trait. In function JIT mode the same cache slot will be used. This causes problems because it is primed for the first class and then reused for the second class, resulting in an incorrect type check failure. The current check for a megamorphic trait call requires current_frame to not be NULL, but this is only set in tracing mode and not in function mode. This patch corrects the check. Closes GH-17660.
39 lines
542 B
PHP
39 lines
542 B
PHP
--TEST--
|
|
GH-17654 (Multiple classes using same trait causes function JIT crash)
|
|
--EXTENSIONS--
|
|
opcache
|
|
--INI--
|
|
opcache.jit=1214
|
|
opcache.jit_buffer_size=16M
|
|
--FILE--
|
|
<?php
|
|
trait TestTrait {
|
|
public function addUnit(string $x) {
|
|
self::addRawUnit($this, $x);
|
|
}
|
|
|
|
public function addRawUnit(self $data, string $x) {
|
|
var_dump($x);
|
|
}
|
|
}
|
|
|
|
class Test {
|
|
use TestTrait;
|
|
}
|
|
|
|
class Test2 {
|
|
use TestTrait;
|
|
}
|
|
|
|
function main()
|
|
{
|
|
(new Test2)->addUnit("test2");
|
|
(new Test)->addUnit("test");
|
|
}
|
|
|
|
main();
|
|
?>
|
|
--EXPECT--
|
|
string(5) "test2"
|
|
string(4) "test"
|