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