1--TEST-- 2Nullsafe e-ssa pi node placement 3--INI-- 4opcache.enable=1 5opcache.enable_cli=1 6opcache.opt_debug_level=0x200000 7--EXTENSIONS-- 8opcache 9--FILE-- 10<?php 11 12class Test { 13 public int $prop; 14} 15 16function test(?Test $test) { 17 var_dump($test?->prop); 18} 19 20?> 21--EXPECTF-- 22$_main: 23 ; (lines=1, args=0, vars=0, tmps=%d, ssa_vars=0, no_loops) 24 ; (before dfa pass) 25 ; %s 26 ; return [long] RANGE[1..1] 27BB0: 28 ; start exit lines=[0-0] 29 ; level=0 300000 RETURN int(1) 31 32test: 33 ; (lines=7, args=1, vars=1, tmps=%d, ssa_vars=6, no_loops) 34 ; (before dfa pass) 35 ; %s 36 ; return [null] RANGE[0..0] 37 ; #0.CV0($test) NOVAL [undef] 38BB0: 39 ; start lines=[0-2] 40 ; to=(BB2, BB1) 41 ; level=0 42 ; children=(BB1, BB2) 430000 #1.CV0($test) [null, object (instanceof Test)] = RECV 1 440001 INIT_FCALL 1 %d string("var_dump") 450002 #2.T1 [null] = JMP_NULL #1.CV0($test) [null, object (instanceof Test)] BB2 46 47BB1: 48 ; follow lines=[3-3] 49 ; from=(BB0) 50 ; to=(BB2) 51 ; idom=BB0 52 ; level=1 53 #3.CV0($test) [object (instanceof Test)] = Pi<BB0>(#1.CV0($test) [null, object (instanceof Test)] & TYPE [ref, bool, long, double, string, array of [any, ref], object, resource]) 540003 #4.T1 [long] = FETCH_OBJ_R #3.CV0($test) [object (instanceof Test)] string("prop") 55 56BB2: 57 ; follow target exit lines=[4-6] 58 ; from=(BB0, BB1) 59 ; idom=BB0 60 ; level=1 61 #5.X1 [null, long] = Phi(#2.X1 [null], #4.X1 [long]) 620004 SEND_VAL #5.T1 [null, long] 1 630005 DO_ICALL 640006 RETURN null 65