This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Adjust unit tests to cope with new sockaddr_in6 functions in Socket (pulled in via...
[perl5.git] / ext / B / t / optree_varinit.t
CommitLineData
724aa791
JC
1#!perl
2
3BEGIN {
74517a3a 4 unshift @INC, 't';
9cd8f857
NC
5 require Config;
6 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
7 print "1..0 # Skip -- Perl configured without B module\n";
8 exit 0;
9 }
19e169bf 10 # require 'test.pl'; # now done by OptreeCheck
724aa791
JC
11}
12use OptreeCheck;
2ce64696 13use Config;
724aa791 14plan tests => 22;
2ce64696
JC
15SKIP: {
16skip "no perlio in this build", 22 unless $Config::Config{useperlio};
17
724aa791
JC
18pass("OPTIMIZER TESTS - VAR INITIALIZATION");
19
20checkOptree ( name => 'sub {my $a}',
21 bcopts => '-exec',
22 code => sub {my $a},
be2b1c74 23 strip_open_hints => 1,
724aa791 24 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 25# 1 <;> nextstate(main 45 optree.t:23) v:>,<,%
724aa791
JC
26# 2 <0> padsv[$a:45,46] M/LVINTRO
27# 3 <1> leavesub[1 ref] K/REFC,1
28EOT_EOT
be2b1c74 29# 1 <;> nextstate(main 45 optree.t:23) v:>,<,%
724aa791
JC
30# 2 <0> padsv[$a:45,46] M/LVINTRO
31# 3 <1> leavesub[1 ref] K/REFC,1
32EONT_EONT
33
34checkOptree ( name => '-exec sub {my $a}',
35 bcopts => '-exec',
36 code => sub {my $a},
be2b1c74 37 strip_open_hints => 1,
724aa791 38 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 39# 1 <;> nextstate(main 49 optree.t:52) v:>,<,%
724aa791
JC
40# 2 <0> padsv[$a:49,50] M/LVINTRO
41# 3 <1> leavesub[1 ref] K/REFC,1
42EOT_EOT
be2b1c74 43# 1 <;> nextstate(main 49 optree.t:45) v:>,<,%
724aa791
JC
44# 2 <0> padsv[$a:49,50] M/LVINTRO
45# 3 <1> leavesub[1 ref] K/REFC,1
46EONT_EONT
47
48checkOptree ( name => 'sub {our $a}',
49 bcopts => '-exec',
50 code => sub {our $a},
be2b1c74 51 strip_open_hints => 1,
724aa791 52 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 531 <;> nextstate(main 21 optree.t:47) v:>,<,%
724aa791
JC
542 <#> gvsv[*a] s/OURINTR
553 <1> leavesub[1 ref] K/REFC,1
56EOT_EOT
be2b1c74 57# 1 <;> nextstate(main 51 optree.t:56) v:>,<,%
724aa791
JC
58# 2 <$> gvsv(*a) s/OURINTR
59# 3 <1> leavesub[1 ref] K/REFC,1
60EONT_EONT
61
62checkOptree ( name => 'sub {local $a}',
63 bcopts => '-exec',
64 code => sub {local $a},
be2b1c74 65 strip_open_hints => 1,
724aa791 66 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 671 <;> nextstate(main 23 optree.t:57) v:>,<,%,{
724aa791
JC
682 <#> gvsv[*a] s/LVINTRO
693 <1> leavesub[1 ref] K/REFC,1
70EOT_EOT
be2b1c74 71# 1 <;> nextstate(main 53 optree.t:67) v:>,<,%,{
724aa791
JC
72# 2 <$> gvsv(*a) s/LVINTRO
73# 3 <1> leavesub[1 ref] K/REFC,1
74EONT_EONT
75
76checkOptree ( name => 'my $a',
77 prog => 'my $a',
78 bcopts => '-basic',
be2b1c74 79 strip_open_hints => 1,
724aa791
JC
80 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
81# 4 <@> leave[1 ref] vKP/REFC ->(end)
82# 1 <0> enter ->2
be2b1c74 83# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
84# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
85EOT_EOT
86# 4 <@> leave[1 ref] vKP/REFC ->(end)
87# 1 <0> enter ->2
be2b1c74 88# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
89# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
90EONT_EONT
91
92checkOptree ( name => 'our $a',
93 prog => 'our $a',
94 bcopts => '-basic',
be2b1c74 95 strip_open_hints => 1,
724aa791
JC
96 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
974 <@> leave[1 ref] vKP/REFC ->(end)
981 <0> enter ->2
be2b1c74 992 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
100- <1> ex-rv2sv vK/17 ->4
1013 <#> gvsv[*a] s/OURINTR ->4
102EOT_EOT
103# 4 <@> leave[1 ref] vKP/REFC ->(end)
104# 1 <0> enter ->2
be2b1c74 105# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
106# - <1> ex-rv2sv vK/17 ->4
107# 3 <$> gvsv(*a) s/OURINTR ->4
108EONT_EONT
109
110checkOptree ( name => 'local $a',
111 prog => 'local $a',
19e169bf 112 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 113 bcopts => '-basic',
be2b1c74 114 strip_open_hints => 1,
724aa791
JC
115 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1164 <@> leave[1 ref] vKP/REFC ->(end)
1171 <0> enter ->2
be2b1c74 1182 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
119- <1> ex-rv2sv vKM/129 ->4
1203 <#> gvsv[*a] s/LVINTRO ->4
121EOT_EOT
122# 4 <@> leave[1 ref] vKP/REFC ->(end)
123# 1 <0> enter ->2
be2b1c74 124# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
125# - <1> ex-rv2sv vKM/129 ->4
126# 3 <$> gvsv(*a) s/LVINTRO ->4
127EONT_EONT
128
129pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
130
131checkOptree ( name => 'sub {my $a=undef}',
132 code => sub {my $a=undef},
133 bcopts => '-basic',
be2b1c74 134 strip_open_hints => 1,
724aa791 135 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
0b599ae5
RGS
1365 <1> leavesub[1 ref] K/REFC,1 ->(end)
137- <@> lineseq KP ->5
be2b1c74 1381 <;> nextstate(main 641 optree_varinit.t:130) v:>,<,% ->2
0b599ae5
RGS
1394 <2> sassign sKS/2 ->5
1402 <0> undef s ->3
1413 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
724aa791 142EOT_EOT
0b599ae5
RGS
143# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
144# - <@> lineseq KP ->5
be2b1c74 145# 1 <;> nextstate(main 641 optree_varinit.t:130) v:>,<,% ->2
0b599ae5
RGS
146# 4 <2> sassign sKS/2 ->5
147# 2 <0> undef s ->3
148# 3 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
724aa791
JC
149EONT_EONT
150
151checkOptree ( name => 'sub {our $a=undef}',
152 code => sub {our $a=undef},
153 note => 'the global must be reset',
154 bcopts => '-basic',
be2b1c74 155 strip_open_hints => 1,
724aa791
JC
156 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1575 <1> leavesub[1 ref] K/REFC,1 ->(end)
158- <@> lineseq KP ->5
be2b1c74 1591 <;> nextstate(main 26 optree.t:109) v:>,<,%,{ ->2
724aa791
JC
1604 <2> sassign sKS/2 ->5
1612 <0> undef s ->3
162- <1> ex-rv2sv sKRM*/17 ->4
1633 <#> gvsv[*a] s/OURINTR ->4
164EOT_EOT
165# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
166# - <@> lineseq KP ->5
be2b1c74 167# 1 <;> nextstate(main 446 optree_varinit.t:137) v:>,<,%,{ ->2
724aa791
JC
168# 4 <2> sassign sKS/2 ->5
169# 2 <0> undef s ->3
170# - <1> ex-rv2sv sKRM*/17 ->4
171# 3 <$> gvsv(*a) s/OURINTR ->4
172EONT_EONT
173
174checkOptree ( name => 'sub {local $a=undef}',
175 code => sub {local $a=undef},
176 note => 'local not used enough to bother',
177 bcopts => '-basic',
be2b1c74 178 strip_open_hints => 1,
724aa791
JC
179 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1805 <1> leavesub[1 ref] K/REFC,1 ->(end)
181- <@> lineseq KP ->5
be2b1c74 1821 <;> nextstate(main 28 optree.t:122) v:>,<,%,{ ->2
724aa791
JC
1834 <2> sassign sKS/2 ->5
1842 <0> undef s ->3
185- <1> ex-rv2sv sKRM*/129 ->4
1863 <#> gvsv[*a] s/LVINTRO ->4
187EOT_EOT
188# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
189# - <@> lineseq KP ->5
be2b1c74 190# 1 <;> nextstate(main 58 optree.t:141) v:>,<,%,{ ->2
724aa791
JC
191# 4 <2> sassign sKS/2 ->5
192# 2 <0> undef s ->3
193# - <1> ex-rv2sv sKRM*/129 ->4
194# 3 <$> gvsv(*a) s/LVINTRO ->4
195EONT_EONT
196
197checkOptree ( name => 'my $a=undef',
198 prog => 'my $a=undef',
199 bcopts => '-basic',
be2b1c74 200 strip_open_hints => 1,
724aa791 201 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
0b599ae5 2026 <@> leave[1 ref] vKP/REFC ->(end)
724aa791 2031 <0> enter ->2
be2b1c74 2042 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
0b599ae5
RGS
2055 <2> sassign vKS/2 ->6
2063 <0> undef s ->4
2074 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
724aa791 208EOT_EOT
0b599ae5 209# 6 <@> leave[1 ref] vKP/REFC ->(end)
724aa791 210# 1 <0> enter ->2
be2b1c74 211# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
0b599ae5
RGS
212# 5 <2> sassign vKS/2 ->6
213# 3 <0> undef s ->4
214# 4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
724aa791
JC
215EONT_EONT
216
217checkOptree ( name => 'our $a=undef',
218 prog => 'our $a=undef',
219 note => 'global must be reassigned',
220 bcopts => '-basic',
be2b1c74 221 strip_open_hints => 1,
724aa791
JC
222 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2236 <@> leave[1 ref] vKP/REFC ->(end)
2241 <0> enter ->2
be2b1c74 2252 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
2265 <2> sassign vKS/2 ->6
2273 <0> undef s ->4
228- <1> ex-rv2sv sKRM*/17 ->5
2294 <#> gvsv[*a] s/OURINTR ->5
230EOT_EOT
231# 6 <@> leave[1 ref] vKP/REFC ->(end)
232# 1 <0> enter ->2
be2b1c74 233# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
234# 5 <2> sassign vKS/2 ->6
235# 3 <0> undef s ->4
236# - <1> ex-rv2sv sKRM*/17 ->5
237# 4 <$> gvsv(*a) s/OURINTR ->5
238EONT_EONT
239
240checkOptree ( name => 'local $a=undef',
241 prog => 'local $a=undef',
19e169bf 242 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791
JC
243 note => 'locals are rare, probly not worth doing',
244 bcopts => '-basic',
be2b1c74 245 strip_open_hints => 1,
724aa791
JC
246 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2476 <@> leave[1 ref] vKP/REFC ->(end)
2481 <0> enter ->2
be2b1c74 2492 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
2505 <2> sassign vKS/2 ->6
2513 <0> undef s ->4
252- <1> ex-rv2sv sKRM*/129 ->5
2534 <#> gvsv[*a] s/LVINTRO ->5
254EOT_EOT
255# 6 <@> leave[1 ref] vKP/REFC ->(end)
256# 1 <0> enter ->2
be2b1c74 257# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
724aa791
JC
258# 5 <2> sassign vKS/2 ->6
259# 3 <0> undef s ->4
260# - <1> ex-rv2sv sKRM*/129 ->5
261# 4 <$> gvsv(*a) s/LVINTRO ->5
262EONT_EONT
263
264checkOptree ( name => 'sub {my $a=()}',
265 code => sub {my $a=()},
724aa791 266 bcopts => '-exec',
be2b1c74 267 strip_open_hints => 1,
724aa791 268 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2691 <;> nextstate(main -439 optree.t:105) v:>,<,%
724aa791
JC
2702 <0> stub sP
2713 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2724 <2> sassign sKS/2
2735 <1> leavesub[1 ref] K/REFC,1
274EOT_EOT
be2b1c74 275# 1 <;> nextstate(main 438 optree_varinit.t:247) v:>,<,%
724aa791
JC
276# 2 <0> stub sP
277# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
278# 4 <2> sassign sKS/2
279# 5 <1> leavesub[1 ref] K/REFC,1
280EONT_EONT
281
282checkOptree ( name => 'sub {our $a=()}',
283 code => sub {our $a=()},
284 #todo => 'probly not worth doing',
285 bcopts => '-exec',
be2b1c74 286 strip_open_hints => 1,
724aa791 287 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2881 <;> nextstate(main 31 optree.t:177) v:>,<,%,{
724aa791
JC
2892 <0> stub sP
2903 <#> gvsv[*a] s/OURINTR
2914 <2> sassign sKS/2
2925 <1> leavesub[1 ref] K/REFC,1
293EOT_EOT
be2b1c74 294# 1 <;> nextstate(main 440 optree_varinit.t:262) v:>,<,%,{
724aa791
JC
295# 2 <0> stub sP
296# 3 <$> gvsv(*a) s/OURINTR
297# 4 <2> sassign sKS/2
298# 5 <1> leavesub[1 ref] K/REFC,1
299EONT_EONT
300
301checkOptree ( name => 'sub {local $a=()}',
302 code => sub {local $a=()},
303 #todo => 'probly not worth doing',
304 bcopts => '-exec',
be2b1c74 305 strip_open_hints => 1,
724aa791 306 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 3071 <;> nextstate(main 33 optree.t:190) v:>,<,%,{
724aa791
JC
3082 <0> stub sP
3093 <#> gvsv[*a] s/LVINTRO
3104 <2> sassign sKS/2
3115 <1> leavesub[1 ref] K/REFC,1
312EOT_EOT
be2b1c74 313# 1 <;> nextstate(main 63 optree.t:225) v:>,<,%,{
724aa791
JC
314# 2 <0> stub sP
315# 3 <$> gvsv(*a) s/LVINTRO
316# 4 <2> sassign sKS/2
317# 5 <1> leavesub[1 ref] K/REFC,1
318EONT_EONT
319
320checkOptree ( name => 'my $a=()',
321 prog => 'my $a=()',
724aa791 322 bcopts => '-exec',
be2b1c74 323 strip_open_hints => 1,
724aa791
JC
324 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3251 <0> enter
be2b1c74 3262 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
3273 <0> stub sP
3284 <0> padsv[$a:1,2] sRM*/LVINTRO
3295 <2> sassign vKS/2
3306 <@> leave[1 ref] vKP/REFC
331EOT_EOT
332# 1 <0> enter
be2b1c74 333# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
334# 3 <0> stub sP
335# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
336# 5 <2> sassign vKS/2
337# 6 <@> leave[1 ref] vKP/REFC
338EONT_EONT
339
340checkOptree ( name => 'our $a=()',
341 prog => 'our $a=()',
342 #todo => 'probly not worth doing',
343 bcopts => '-exec',
be2b1c74 344 strip_open_hints => 1,
724aa791
JC
345 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3461 <0> enter
be2b1c74 3472 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
3483 <0> stub sP
3494 <#> gvsv[*a] s/OURINTR
3505 <2> sassign vKS/2
3516 <@> leave[1 ref] vKP/REFC
352EOT_EOT
353# 1 <0> enter
be2b1c74 354# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
355# 3 <0> stub sP
356# 4 <$> gvsv(*a) s/OURINTR
357# 5 <2> sassign vKS/2
358# 6 <@> leave[1 ref] vKP/REFC
359EONT_EONT
360
361checkOptree ( name => 'local $a=()',
362 prog => 'local $a=()',
19e169bf 363 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791
JC
364 #todo => 'probly not worth doing',
365 bcopts => '-exec',
be2b1c74 366 strip_open_hints => 1,
724aa791
JC
367 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3681 <0> enter
be2b1c74 3692 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
3703 <0> stub sP
3714 <#> gvsv[*a] s/LVINTRO
3725 <2> sassign vKS/2
3736 <@> leave[1 ref] vKP/REFC
374EOT_EOT
375# 1 <0> enter
be2b1c74 376# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
377# 3 <0> stub sP
378# 4 <$> gvsv(*a) s/LVINTRO
379# 5 <2> sassign vKS/2
380# 6 <@> leave[1 ref] vKP/REFC
381EONT_EONT
382
383checkOptree ( name => 'my ($a,$b)=()',
384 prog => 'my ($a,$b)=()',
385 #todo => 'probly not worth doing',
386 bcopts => '-exec',
be2b1c74 387 strip_open_hints => 1,
724aa791
JC
388 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
389# 1 <0> enter
be2b1c74 390# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
391# 3 <0> pushmark s
392# 4 <0> pushmark sRM*/128
393# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
394# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
395# 7 <2> aassign[t3] vKS
396# 8 <@> leave[1 ref] vKP/REFC
397EOT_EOT
398# 1 <0> enter
be2b1c74 399# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
400# 3 <0> pushmark s
401# 4 <0> pushmark sRM*/128
402# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
403# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
404# 7 <2> aassign[t3] vKS
405# 8 <@> leave[1 ref] vKP/REFC
406EONT_EONT
407
2ce64696
JC
408} #skip
409
724aa791
JC
410__END__
411