[php-src] Issue #15178: zend_jit_trace_build_tssa: Assertion `&call->func->op_array == op_array' failed

From: Date: Wed, 31 Jul 2024 00:23:02 +0000
Subject: [php-src] Issue #15178: zend_jit_trace_build_tssa: Assertion `&call->func->op_array == op_array' failed
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-247404@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/15178 Author: TRowbotham ### Description While #15101 is now fixed for me, I am now hitting another assertion `zend_jit_trace_build_tssa: Assertion &call->func->op_array == op_array'`` with the JIT enabled. I was unsuccessful at creating a reduced reproducer for this issue as well, unfortunately. Relevant changed ini settings: opcache.enable_cli=1 opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.jit=1255 opcache.jit_buffer_size=256M Backtrace ```bash php: ./jit/zend_jit_trace.c:2399: zend_jit_trace_build_tssa: Assertion `&call->func->op_array == op_array' failed. Program received signal SIGABRT, Aborted. __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737294966912) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: No such file or directory. (gdb) bt #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737294966912) at ./nptl/pthread_kill.c:44 #1 __pthread_kill_internal (signo=6, threadid=140737294966912) at ./nptl/pthread_kill.c:78 #2 __GI___pthread_kill (threadid=140737294966912, signo=signo@entry=6) at ./nptl/pthread_kill.c:89 #3 0x00007ffff7405476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #4 0x00007ffff73eb7f3 in __GI_abort () at ./stdlib/abort.c:79 #5 0x00007ffff73eb71b in __assert_fail_base (fmt=0x7ffff75a0130 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x7ffff40f58c8 "&call->func->op_array == op_array", file=0x7ffff40f5314 "./jit/zend_jit_trace.c", line=2399, function=<optimized out>) at ./assert/assert.c:92 #6 0x00007ffff73fce96 in __GI___assert_fail (assertion=0x7ffff40f58c8 "&call->func->op_array == op_array", file=0x7ffff40f5314 "./jit/zend_jit_trace.c", line=2399, function=0x7ffff40f7f70 <__PRETTY_FUNCTION__.17> "zend_jit_trace_build_tssa") at ./assert/assert.c:101 #7 0x00007ffff40a0c59 in zend_jit_trace_build_tssa (trace_buffer=0x7fffffff6ea0, parent_trace=33, exit_num=0, script=0x0, op_arrays=0x7fffffff17c0, num_op_arrays_ptr=0x7fffffff14e4) at ./jit/zend_jit_trace.c:2399 #8 0x00007ffff40a7c3a in zend_jit_trace (trace_buffer=0x7fffffff6ea0, parent_trace=33, exit_num=0) at ./jit/zend_jit_trace.c:4046 #9 0x00007ffff40c9672 in zend_jit_compile_side_trace (trace_buffer=0x7fffffff6ea0, parent_num=33, exit_num=0, polymorphism=0) at ./jit/zend_jit_trace.c:8192 #10 0x00007ffff40ca54f in zend_jit_trace_hot_side (execute_data=0x7ffff44177a0, parent_num=33, exit_num=0) at ./jit/zend_jit_trace.c:8413 #11 0x00007ffff40cbc47 in zend_jit_trace_exit (exit_num=0, regs=0x7fffffffaff0) at ./jit/zend_jit_trace.c:8682 #12 0x0000555545400620 in ?? () #13 0x00007ffff449c900 in ?? () #14 0x000055553654c060 in ?? () #15 0x00005555364d36d0 in ?? () #16 0x00007ffff4555a00 in ?? () #17 0x00007fffffffb100 in ?? () #18 0x00007fffffffb350 in ?? () #19 0x00005555364d36d0 in ?? () #20 0x0000555536553920 in ?? () --Type <RET> for more, q to quit, c to continue without paging--c #21 0x0000000000000001 in ?? () #22 0x0000000000000000 in ?? () ``` Information about the last complied trace using -d opcache.jit_debug=0x1ff000 ``` ---- TRACE 50 start (side trace 38/0) Rowbot\DOM\Parser\HTML\TreeBuilder::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/TreeBuilder.php:43 0014 T3 = FETCH_OBJ_R CV1($adjustedCurrentNode) string("namespaceURI") ; op1(object of class Rowbot\DOM\Element\HTML\HTMLDivElement) val(string) 0015 T4 = FETCH_CLASS_CONSTANT string("Rowbot\\DOM\\Namespaces") string("HTML") 0016 T2 = IS_IDENTICAL T3 T4 ; op1(string) op2(string) 0017 ;JMPNZ T2 0069 0069 T3 = FETCH_OBJ_R THIS string("context") ; val(object) 0070 T2 = FETCH_OBJ_R T3 string("insertionMode") ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) val(object) 0071 INIT_METHOD_CALL 2 T2 string("processToken") ; op1(object of class Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode) >init Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken 0072 CHECK_FUNC_ARG 1 0073 V2 = FETCH_OBJ_FUNC_ARG (ref) THIS string("context") ; val(object) 0074 SEND_FUNC_ARG V2 1 ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) 0075 SEND_VAR_EX CV0($token) 2 ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) 0076 DO_FCALL >enter Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken 0000 CV0($context) = RECV 1 0001 CV1($token) = RECV 2 0002 T3 = INSTANCEOF CV1($token) string("Rowbot\\DOM\\Parser\\Token\\CharacterToken") ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) 0003 ;JMPZ T3 0033 0004 T4 = FETCH_OBJ_R CV1($token) string("data") ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) val(string) 0005 T3 = IS_IDENTICAL T4 string("") ; op1(string) 0006 ;JMPZ T3 0008 0008 INIT_METHOD_CALL 1 THIS string("reconstructActiveFormattingElements") >init >Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0009 SEND_VAR CV0($context) 1 ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) 0010 DO_FCALL >enter >Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0000 CV0($context) = RECV 1 0001 T4 = FETCH_OBJ_R CV0($context) string("activeFormattingElements") ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) val(object) 0002 INIT_METHOD_CALL 0 T4 string("isEmpty") ; op1(object of class Rowbot\DOM\Parser\Collection\ActiveFormattingElementStack) >init Rowbot\DOM\Parser\Collection\ObjectStack::isEmpty 0003 V4 = DO_FCALL >enter Rowbot\DOM\Parser\Collection\ObjectStack::isEmpty 0000 T1 = FETCH_OBJ_R THIS string("size") ; val(int) 0001 T0 = IS_IDENTICAL T1 int(0) ; op1(int) 0002 RETURN T0 ; op1(bool) <back Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0004 JMPZ V4 0006 ; op1(bool) 0006 T4 = FETCH_OBJ_R CV0($context) string("activeFormattingElements") ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) val(object) 0007 INIT_METHOD_CALL 0 T4 string("top") ; op1(object of class Rowbot\DOM\Parser\Collection\ActiveFormattingElementStack) >init Rowbot\DOM\Parser\Collection\ObjectStack::top 0008 V4 = DO_FCALL >enter Rowbot\DOM\Parser\Collection\ObjectStack::top 0000 T1 = FETCH_OBJ_R THIS string("size") ; val(int) 0001 T0 = IS_IDENTICAL T1 int(0) ; op1(int) 0002 ;JMPZ T0 0006 0006 T0 = FETCH_OBJ_R THIS string("size") ; val(int) 0007 T2 = SUB T0 int(1) ; op1(int) 0008 T1 = FETCH_OBJ_R THIS string("stack") ; val(array) 0009 T0 = FETCH_DIM_R T1 T2 ; op1(packed array) op2(int) val(object) 0010 RETURN T0 ; op1(object of class Rowbot\DOM\Parser\Marker) <back Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0009 CV1($entry) = QM_ASSIGN V4 ; op1(object of class Rowbot\DOM\Parser\Marker) 0010 T4 = INSTANCEOF CV1($entry) string("Rowbot\\DOM\\Parser\\Marker") ; op1(object of class Rowbot\DOM\Parser\Marker) 0011 ;JMPNZ T4 0018 0018 RETURN null <back Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken 0011 INIT_METHOD_CALL 2 THIS string("insertCharacter") >init Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::insertCharacter 0012 SEND_VAR_EX CV0($context) 1 ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) 0013 SEND_VAR_EX CV1($token) 2 ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) 0014 DO_FCALL >enter Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::insertCharacter ---- TRACE 50 stop (link to 19) ---- TRACE 50 TSSA start (side trace 38/0) Rowbot\DOM\Parser\HTML\TreeBuilder::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/TreeBuilder.php:43 ;#0.CV0($token) [rc1, rcn, object] ;#1.CV1($adjustedCurrentNode) [rc1, rcn, object] 0014 #5.T3 [!rc1, rcn, string] = FETCH_OBJ_R #1.CV1($adjustedCurrentNode) [rc1, rcn, object] string("namespaceURI") ; op1(object of class Rowbot\DOM\Element\HTML\HTMLDivElement) val(string) 0015 #6.T4 [!rc1, rcn, string] = FETCH_CLASS_CONSTANT string("Rowbot\\DOM\\Namespaces") string("HTML") 0016 #7.T2 [bool] = IS_IDENTICAL #5.T3 [!rc1, rcn, string] #6.T4 [!rc1, rcn, string] ; op1(string) op2(string) 0017 ;JMPNZ #7.T2 [bool] 0069 0069 #8.T3 [rcn, object] = FETCH_OBJ_R THIS string("context") ; val(object) 0070 #9.T2 [!rc1, rcn, object] = FETCH_OBJ_R #8.T3 [rcn, object] string("insertionMode") ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) val(object) 0071 INIT_METHOD_CALL 2 #9.T2 [!rc1, rcn, object] string("processToken") ; op1(object of class Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode) >init Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken 0072 CHECK_FUNC_ARG 1 0073 #10.V2 [!rc1, rcn, object] = FETCH_OBJ_FUNC_ARG (ref) THIS string("context") ; val(object) 0074 SEND_FUNC_ARG #10.V2 [!rc1, rcn, object] 1 ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) 0075 SEND_VAR_EX #0.CV0($token) [rc1, rcn, object] -> #11.CV0($token) NOVAL [rc1, rcn, object] 2 ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) 0076 DO_FCALL >enter Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken 0000 #15.CV0($context) [rc1, rcn, object] = RECV 1 0001 #16.CV1($token) [rc1, rcn, object] = RECV 2 0002 #17.T3 [bool] = INSTANCEOF #16.CV1($token) [rc1, rcn, object] string("Rowbot\\DOM\\Parser\\Token\\CharacterToken") ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) 0003 ;JMPZ #17.T3 [bool] 0033 0004 #18.T4 [!rc1, rcn, string] = FETCH_OBJ_R #16.CV1($token) [rc1, rcn, object] string("data") ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) val(string) 0005 #19.T3 [bool] = IS_IDENTICAL #18.T4 [!rc1, rcn, string] string("") ; op1(string) 0006 ;JMPZ #19.T3 [bool] 0008 0008 INIT_METHOD_CALL 1 THIS string("reconstructActiveFormattingElements") >init >Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0009 SEND_VAR #15.CV0($context) [rc1, rcn, object] -> #20.CV0($context) [rc1, rcn, object] 1 ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) 0010 DO_FCALL >enter >Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements ;#22.CV1($entry) NOVAL [undef] 0000 #25.CV0($context) [rc1, rcn, object] = RECV 1 0001 #26.T4 [!rc1, rcn, object] = FETCH_OBJ_R #25.CV0($context) [rc1, rcn, object] string("activeFormattingElements") ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) val(object) 0002 INIT_METHOD_CALL 0 #26.T4 [!rc1, rcn, object] string("isEmpty") ; op1(object of class Rowbot\DOM\Parser\Collection\ActiveFormattingElementStack) >init Rowbot\DOM\Parser\Collection\ObjectStack::isEmpty 0003 #27.V4 [false] = DO_FCALL >enter Rowbot\DOM\Parser\Collection\ObjectStack::isEmpty 0000 #28.T1 [long] = FETCH_OBJ_R THIS string("size") ; val(int) 0001 #29.T0 [!false] = IS_IDENTICAL #28.T1 [long] int(0) ; op1(int) 0002 RETURN #29.T0 [!false] ; op1(bool) <back Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0004 JMPZ #27.V4 [false] 0006 ; op1(bool) 0006 #30.T4 [!rc1, rcn, object] = FETCH_OBJ_R #25.CV0($context) [rc1, rcn, object] string("activeFormattingElements") ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) val(object) 0007 INIT_METHOD_CALL 0 #30.T4 [!rc1, rcn, object] string("top") ; op1(object of class Rowbot\DOM\Parser\Collection\ActiveFormattingElementStack) >init Rowbot\DOM\Parser\Collection\ObjectStack::top 0008 #31.V4 [rc1, rcn, object] = DO_FCALL >enter Rowbot\DOM\Parser\Collection\ObjectStack::top 0000 #32.T1 [long] = FETCH_OBJ_R THIS string("size") ; val(int) 0001 #33.T0 [bool] = IS_IDENTICAL #32.T1 [long] int(0) ; op1(int) 0002 ;JMPZ #33.T0 [bool] 0006 0006 #34.T0 [long] = FETCH_OBJ_R THIS string("size") ; val(int) 0007 #35.T2 [!long] = SUB #34.T0 [long] int(1) ; op1(int) 0008 #36.T1 [rcn, ![empty, packed] array [long] of [any, ref]] = FETCH_OBJ_R THIS string("stack") ; val(array) 0009 #37.T0 [!rcn, object] = FETCH_DIM_R #36.T1 [rcn, ![empty, packed] array [long] of [any, ref]] #35.T2 [!long] ; op1(packed array) op2(int) val(object) 0010 RETURN #37.T0 [!rcn, object] ; op1(object of class Rowbot\DOM\Parser\Marker) <back Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::reconstructActiveFormattingElements 0009 QM_ASSIGN #31.V4 [rc1, rcn, object] #22.CV1($entry) NOVAL [undef] -> #38.CV1($entry) [rc1, rcn, object] ; op1(object of class Rowbot\DOM\Parser\Marker) 0010 #39.T4 [bool] = INSTANCEOF #38.CV1($entry) [rc1, rcn, object] string("Rowbot\\DOM\\Parser\\Marker") ; op1(object of class Rowbot\DOM\Parser\Marker) 0011 ;JMPNZ #39.T4 [bool] 0018 0018 RETURN null <back Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken 0011 INIT_METHOD_CALL 2 THIS string("insertCharacter") >init Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::insertCharacter 0012 SEND_VAR_EX #20.CV0($context) [rc1, rcn, object] -> #40.CV0($context) [rc1, rcn, object] 1 ; op1(object of class Rowbot\DOM\Parser\HTML\TreeBuilderContext) 0013 SEND_VAR_EX #16.CV1($token) [rc1, rcn, object] -> #41.CV1($token) [rc1, rcn, object] 2 ; op1(object of class Rowbot\DOM\Parser\Token\CharacterToken) 0014 DO_FCALL >enter Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::insertCharacter ---- TRACE 50 TSSA stop (link to 19) ---- TRACE 50 exit info exit_0: 0014/0000/4 CV0($token):object CV1($adjustedCurrentNode):object X3:object exit_1: 0015/0004/4 CV0($token):object CV1($adjustedCurrentNode):object X3:unknown(zval_copy(rcx)) exit_2: 0015/0008/4 CV0($token):object CV1($adjustedCurrentNode):object X3:unknown(zval_copy(rcx)) exit_3: 0016/0012/4 CV0($token):object CV1($adjustedCurrentNode):object X3:string exit_4: 0018/0016/5 CV0($token):object CV1($adjustedCurrentNode):object X3:string X4:string exit_5: 0069/0021/5/VM CV0($token):object CV1($adjustedCurrentNode):object X3:string X4:string exit_6: 0070/0026/5 CV0($token):object CV1($adjustedCurrentNode):object X3:object X4:string exit_7: 0071/0031/5/FREE_OP1 CV0($token):object CV1($adjustedCurrentNode):object X2:unknown(zval_copy(rcx)) X3:object X4:string exit_8: 0071/0036/5/FREE_OP1 CV0($token):object CV1($adjustedCurrentNode):object X2:unknown(zval_copy(rcx)) X3:object X4:string exit_9: 0071/0041/5/POLY(rax, rdi) CV0($token):object CV1($adjustedCurrentNode):object X2:object X3:object X4:string exit_10: 0071/0046/5/VM CV0($token):object CV1($adjustedCurrentNode):object X2:object X3:object X4:string exit_11: 0074/0051/5 CV0($token):object CV1($adjustedCurrentNode):object X2:unknown(zval_copy(rcx)) X3:object X4:string exit_12: 0074/0056/5 CV0($token):object CV1($adjustedCurrentNode):object X2:unknown(zval_copy(rcx)) X3:object X4:string exit_13: 0033/0061/3 CV0($context):object CV1($token):object CV2($el):undef exit_14: 0004/0064/3 CV0($context):object CV1($token):object CV2($el):undef exit_15: 0005/0067/5 CV0($context):object CV1($token):object CV2($el):undef X4:unknown(zval_copy(rcx)) exit_16: 0005/0072/5 CV0($context):object CV1($token):object CV2($el):undef X4:unknown(zval_copy(rcx)) exit_17: 0007/0077/5 CV0($context):object CV1($token):object CV2($el):undef X4:string exit_18: 0008/0082/5 CV0($context):object CV1($token):object CV2($el):undef X4:string exit_19: 0008/0087/5/VM CV0($context):object CV1($token):object CV2($el):undef X4:string exit_20: 0001/0092/4 CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef exit_21: 0002/0096/5 CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:unknown(zval_copy(rcx)) exit_22: 0002/0101/5 CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:unknown(zval_copy(rcx)) exit_23: 0002/0106/5/POLY(rax, rdi) CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:object exit_24: 0002/0111/5/VM CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:object exit_25: 0000/----/0/VM exit_26: 0002/0116/2 X1:int exit_27: 0007/0118/5 CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:unknown(zval_copy(rcx)) exit_28: 0007/0123/5 CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:unknown(zval_copy(rcx)) exit_29: 0007/0128/5/POLY(rax, rdi) CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:object exit_30: 0007/0133/5/VM CV0($context):object CV1($entry):undef CV2($cursor):undef CV3($newElement):undef X4:object exit_31: 0000/----/0/VM exit_32: 0003/0138/2 X1:int exit_33: 0006/0140/2/VM X1:int exit_34: 0008/0142/3 X0:int X1:int X2:float(-9.22337e+18) exit_35: 0008/0145/3/VM X0:int X1:int X2:int(rcx) exit_36: 0009/0148/3/VM X0:int X1:array X2:int(rcx) exit_37: 0009/0151/3 X0:int X1:array X2:int(rcx) exit_38: 0010/0154/3/FREE_OP1 X0:unknown(zval_copy(rdx)) X1:array X2:int(rcx) exit_39: 0010/0157/3/FREE_OP1 X0:unknown(zval_copy(rdx)) X1:array X2:int(rcx) exit_40: 0012/0160/5 CV0($context):object CV1($entry):object CV2($cursor):undef CV3($newElement):undef X4:object exit_41: 0011/0165/5/POLY(rax, rdi) CV0($context):object CV1($token):object CV2($el):undef X4:string exit_42: 0011/0170/5/VM CV0($context):object CV1($token):object CV2($el):undef X4:string ---- TRACE 50 compiled TRACE 36 exit 3 Rowbot\DOM\Parser\HTML\Tokenizer::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/Tokenizer.php:149 TRACE 24 exit 9 Rowbot\DOM\Parser\HTML\Tokenizer::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/Tokenizer.php:310 TRACE 32 exit 20 Rowbot\DOM\Parser\HTML\Tokenizer::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/Tokenizer.php:377 TRACE 32 exit 20 Rowbot\DOM\Parser\HTML\Tokenizer::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/Tokenizer.php:377 TRACE 32 exit 20 Rowbot\DOM\Parser\HTML\Tokenizer::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/Tokenizer.php:377 TRACE 32 exit 5 Rowbot\DOM\Parser\HTML\Tokenizer::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/Tokenizer.php:355 TRACE 20 exit 3 Rowbot\DOM\Parser\HTML\HTMLParser::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/HTMLParser.php:221 TRACE 38 exit 9 Rowbot\DOM\Parser\HTML\TreeBuilder::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/TreeBuilder.php:91 TRACE 19 exit 33 Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::getAppropriatePlaceForInsertingNode() /home/trevor/GitHub/PHPJS/src/Parser/HTML/InsertionMode/AbstractInsertionMode.php:363 TRACE 39 exit 4 Rowbot\DOM\Parser\HTML\InsertionMode\InBodyInsertionMode::processToken() /home/trevor/GitHub/PHPJS/src/Parser/HTML/InsertionMode/InBodyInsertionMode.php:129 TRACE 38 exit 9 Rowbot\DOM\Parser\HTML\TreeBuilder::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/TreeBuilder.php:91 TRACE 19 exit 33 Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::getAppropriatePlaceForInsertingNode() /home/trevor/GitHub/PHPJS/src/Parser/HTML/InsertionMode/AbstractInsertionMode.php:363 TRACE 38 exit 9 Rowbot\DOM\Parser\HTML\TreeBuilder::run() /home/trevor/GitHub/PHPJS/src/Parser/HTML/TreeBuilder.php:91 TRACE 19 exit 33 Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::getAppropriatePlaceForInsertingNode() /home/trevor/GitHub/PHPJS/src/Parser/HTML/InsertionMode/AbstractInsertionMode.php:363 ---- TRACE 51 start (side trace 19/33) Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::getAppropriatePlaceForInsertingNode() /home/trevor/GitHub/PHPJS/src/Parser/HTML/InsertionMode/AbstractInsertionMode.php:363 0100 T12 = FETCH_OBJ_R CV9($adjustedInsertionLocation) string("location") ; op1(object of class Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation) val(object) 0101 T13 = FETCH_CLASS_CONSTANT string("Rowbot\\DOM\\NodeInsertionLocation") string("BEFORE_END") 0102 T11 = IS_IDENTICAL T12 T13 ; op1(object of class Rowbot\DOM\NodeInsertionLocation) op2(object of class Rowbot\DOM\NodeInsertionLocation) 0103 ;JMPZ T11 0113 0104 V11 = NEW 2 string("Rowbot\\DOM\\Parser\\HTML\\AdjustedInsertionLocation") >init Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation::__construct 0105 CHECK_FUNC_ARG 1 0106 V13 = FETCH_OBJ_FUNC_ARG CV9($adjustedInsertionLocation) string("node") ; op1(object of class Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation) val(object) 0107 V12 = FETCH_OBJ_FUNC_ARG (ref) V13 string("content") ; op1(object of class Rowbot\DOM\Element\HTML\HTMLTemplateElement) >enter Rowbot\DOM\Element\HTML\HTMLTemplateElement::$content::get 0000 T0 = FETCH_OBJ_R THIS string("_content") ; val(object) 0001 VERIFY_RETURN_TYPE T0 ; op1(object of class Rowbot\DOM\DocumentFragment) 0002 RETURN T0 ; op1(object of class Rowbot\DOM\DocumentFragment) <back Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::getAppropriatePlaceForInsertingNode 0108 SEND_FUNC_ARG V12 1 ; op1(object of class Rowbot\DOM\DocumentFragment) 0109 T12 = FETCH_CLASS_CONSTANT string("Rowbot\\DOM\\NodeInsertionLocation") string("BEFORE_END") 0110 SEND_VAL_EX T12 2 ; op1(object of class Rowbot\DOM\NodeInsertionLocation) 0111 DO_FCALL >enter Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation::__construct 0000 CV0($node) = RECV 1 0001 CV1($location) = RECV 2 0002 ASSIGN_OBJ THIS string("node") ; op3(object) val(undef) 0003 ;OP_DATA CV0($node) 0004 ASSIGN_OBJ THIS string("location") ; op3(object) val(undef) 0005 ;OP_DATA CV1($location) 0006 RETURN null <back Rowbot\DOM\Parser\HTML\InsertionMode\AbstractInsertionMode::getAppropriatePlaceForInsertingNode 0112 ASSIGN CV9($adjustedInsertionLocation) V11 ; op1(object of class Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation) op2(object of class Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation) 0113 VERIFY_RETURN_TYPE CV9($adjustedInsertionLocation) ; op1(object of class Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation) 0114 RETURN CV9($adjustedInsertionLocation) ; op1(object of class Rowbot\DOM\Parser\HTML\AdjustedInsertionLocation) ---- TRACE 51 stop (return) php: ./jit/zend_jit_trace.c:2399: zend_jit_trace_build_tssa: Assertion `&call->func->op_array == op_array' failed. Aborted ``` Looking at the trace info, these are the code locations: https://github.com/TRowbotham/PHPDOM/blob/dev/src/Parser/HTML/TreeBuilder.php#L32 https://github.com/TRowbotham/PHPDOM/blob/dev/src/Parser/HTML/InsertionMode/InBodyInsertionMode.php#L55 https://github.com/TRowbotham/PHPDOM/blob/dev/src/Parser/HTML/InsertionMode/InBodyInsertionMode.php#L1589 https://github.com/TRowbotham/PHPDOM/blob/dev/src/Parser/HTML/InsertionMode/AbstractInsertionMode.php#L384 https://github.com/TRowbotham/PHPDOM/blob/dev/src/Parser/HTML/InsertionMode/AbstractInsertionMode.php#L281 I hit this assertion when running vendor/bin/phpunit tests/dom/nodes/DocumentFragmentGetElementByIdTest.php ### PHP Version master ### Operating System Ubuntu 22.04

« previous php.bugs (#247404) next »