This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Test that defined warns for package arrays and hashes.
[perl5.git] / t / lib / warnings / sv
1   sv.c  
2
3   warn(warn_uninit);
4
5   warn(warn_uninit);
6
7   warn(warn_uninit);
8
9   warn(warn_uninit);
10
11   not_a_number(sv);
12
13   not_a_number(sv);
14
15   warn(warn_uninit);
16
17   not_a_number(sv);
18
19   warn(warn_uninit);
20
21   not_a_number(sv);
22
23   not_a_number(sv);
24
25   warn(warn_uninit);
26
27   warn(warn_uninit);
28
29   Subroutine %s redefined       
30
31   Invalid conversion in %s:
32
33   Undefined value assigned to typeglob
34
35   Reference is already weak                     [Perl_sv_rvweaken] <<TODO
36
37   Mandatory Warnings
38   ------------------
39   Malformed UTF-8 character [sv_pos_b2u] (not tested: difficult to produce
40                                           with perl now)
41
42   Mandatory Warnings TODO
43   ------------------
44     Attempt to free non-arena SV: 0x%lx         [del_sv]
45     Reference miscount in sv_replace()          [sv_replace]
46     Attempt to free unreferenced scalar         [sv_free]
47     Attempt to free temp prematurely: SV 0x%lx  [sv_free]
48     semi-panic: attempt to dup freed string     [newSVsv]
49     
50
51 __END__
52 # sv.c
53 use integer ;
54 use warnings 'uninitialized' ;
55 $x = 1 + $a[0] ; # a
56 no warnings 'uninitialized' ;
57 $x = 1 + $b[0] ; # a
58 EXPECT
59 Use of uninitialized value $a[0] in integer addition (+) at - line 4.
60 ########
61 # sv.c (sv_2iv)
62 package fred ;
63 sub TIESCALAR { my $x ; bless \$x}
64 sub FETCH { return undef }
65 sub STORE { return 1 }
66 package main ;
67 tie $A, 'fred' ;
68 use integer ;
69 use warnings 'uninitialized' ;
70 $A *= 2 ;
71 no warnings 'uninitialized' ;
72 $A *= 2 ;
73 EXPECT
74 Use of uninitialized value $A in integer multiplication (*) at - line 10.
75 ########
76 # sv.c
77 use integer ;
78 use warnings 'uninitialized' ;
79 my $x *= 2 ; #b 
80 no warnings 'uninitialized' ;
81 my $y *= 2 ; #b 
82 EXPECT
83 Use of uninitialized value $x in integer multiplication (*) at - line 4.
84 ########
85 # sv.c (sv_2uv)
86 package fred ;
87 sub TIESCALAR { my $x ; bless \$x}
88 sub FETCH { return undef }
89 sub STORE { return 1 }
90 package main ;
91 tie $A, 'fred' ;
92 use warnings 'uninitialized' ;
93 $B = 0 ;
94 $B |= $A ;
95 no warnings 'uninitialized' ;
96 $B = 0 ;
97 $B |= $A ;
98 EXPECT
99 Use of uninitialized value $A in bitwise or (|) at - line 10.
100 ########
101 # sv.c
102 use warnings 'uninitialized' ;
103 my $Y = 1 ; 
104 my $x = 1 | $a[$Y] ;
105 no warnings 'uninitialized' ;
106 my $Y = 1 ; 
107 $x = 1 | $b[$Y] ;
108 EXPECT
109 Use of uninitialized value within @a in bitwise or (|) at - line 4.
110 ########
111 # sv.c
112 use warnings 'uninitialized' ;
113 my $Y = 1 ; 
114 my $x = 1 & $a[$Y] ;
115 no warnings 'uninitialized' ;
116 my $Y = 1 ; 
117 $x = 1 & $b[$Y] ;
118 EXPECT
119 Use of uninitialized value within @a in bitwise and (&) at - line 4.
120 ########
121 # sv.c
122 use warnings 'uninitialized' ;
123 my $Y = 1 ; 
124 my $x = ~$a[$Y] ;
125 no warnings 'uninitialized' ;
126 my $Y = 1 ; 
127 $x = ~$b[$Y] ;
128 EXPECT
129 Use of uninitialized value within @a in 1's complement (~) at - line 4.
130 ########
131 # sv.c
132 use warnings 'uninitialized' ;
133 my $x *= 1 ; # d
134 no warnings 'uninitialized' ;
135 my $y *= 1 ; # d
136 EXPECT
137 Use of uninitialized value $x in multiplication (*) at - line 3.
138 ########
139 # sv.c
140 use warnings 'uninitialized' ;
141 $x = 1 + $a[0] ; # e
142 no warnings 'uninitialized' ;
143 $x = 1 + $b[0] ; # e
144 EXPECT
145 Use of uninitialized value $a[0] in addition (+) at - line 3.
146 ########
147 # sv.c (sv_2nv)
148 package fred ;
149 sub TIESCALAR { my $x ; bless \$x}
150 sub FETCH { return undef }
151 sub STORE { return 1 }
152 package main ;
153 tie $A, 'fred' ;
154 use warnings 'uninitialized' ;
155 $A *= 2 ;
156 no warnings 'uninitialized' ;
157 $A *= 2 ;
158 EXPECT
159 Use of uninitialized value $A in multiplication (*) at - line 9.
160 ########
161 # sv.c
162 use warnings 'uninitialized' ;
163 $x = $y + 1 ; # f
164 no warnings 'uninitialized' ;
165 $x = $z + 1 ; # f
166 EXPECT
167 Use of uninitialized value $y in addition (+) at - line 3.
168 ########
169 # sv.c
170 use warnings 'uninitialized' ;
171 $x = chop undef ; # g
172 no warnings 'uninitialized' ;
173 $x = chop undef ; # g
174 EXPECT
175 Modification of a read-only value attempted at - line 3.
176 ########
177 # sv.c
178 use warnings 'uninitialized' ;
179 $x = chop $y ; # h
180 no warnings 'uninitialized' ;
181 $x = chop $z ; # h
182 EXPECT
183 Use of uninitialized value $y in scalar chop at - line 3.
184 ########
185 # sv.c (sv_2pv)
186 package fred ;
187 sub TIESCALAR { my $x ; bless \$x}
188 sub FETCH { return undef }
189 sub STORE { return 1 }
190 package main ;
191 tie $A, 'fred' ;
192 use warnings 'uninitialized' ;
193 $B = "" ;
194 $B .= $A ;
195 no warnings 'uninitialized' ;
196 $C = "" ;
197 $C .= $A ;
198 EXPECT
199 Use of uninitialized value $A in concatenation (.) or string at - line 10.
200 ########
201 # perlbug 20011116.125
202 use warnings 'uninitialized';
203 $a = undef;
204 $foo = join '', $a, "\n";
205 $foo = "$a\n";
206 $foo = "a:$a\n";
207 EXPECT
208 Use of uninitialized value $a in join or string at - line 4.
209 Use of uninitialized value $a in concatenation (.) or string at - line 5.
210 Use of uninitialized value $a in concatenation (.) or string at - line 6.
211 ########
212 # sv.c 
213 use warnings 'numeric' ;
214 sub TIESCALAR{bless[]} ; 
215 sub FETCH {"def"} ; 
216 tie $a,"main" ; 
217 my $b = 1 + $a;
218 no warnings 'numeric' ;
219 my $c = 1 + $a;
220 EXPECT
221 Argument "def" isn't numeric in addition (+) at - line 6.
222 ########
223 # sv.c
224 use warnings 'numeric' ;
225 my $x = 1 + "def" ;
226 no warnings 'numeric' ;
227 my $z = 1 + "def" ;
228 EXPECT
229 Argument "def" isn't numeric in addition (+) at - line 3.
230 ########
231 # sv.c
232 use warnings 'numeric' ;
233 my $a = "def" ;
234 my $x = 1 + $a ;
235 no warnings 'numeric' ;
236 my $y = 1 + $a ;
237 EXPECT
238 Argument "def" isn't numeric in addition (+) at - line 4.
239 ########
240 # sv.c
241 use warnings 'numeric' ; use integer ;
242 my $a = "def" ;
243 my $x = 1 + $a ;
244 no warnings 'numeric' ;
245 my $z = 1 + $a ;
246 EXPECT
247 Argument "def" isn't numeric in integer addition (+) at - line 4.
248 ########
249 # sv.c
250 use warnings 'numeric' ;
251 my $x = 1 & "def" ;
252 no warnings 'numeric' ;
253 my $z = 1 & "def" ;
254 EXPECT
255 Argument "def" isn't numeric in bitwise and (&) at - line 3.
256 ########
257 # sv.c
258 use warnings 'numeric' ;
259 my $x = pack i => "def" ;
260 no warnings 'numeric' ;
261 my $z = pack i => "def" ;
262 EXPECT
263 Argument "def" isn't numeric in pack at - line 3.
264 ########
265 # sv.c
266 use warnings 'numeric' ; 
267 my $a = "d\0f" ;
268 my $x = 1 + $a ;
269 no warnings 'numeric' ;
270 my $z = 1 + $a ;
271 EXPECT
272 Argument "d\0f" isn't numeric in addition (+) at - line 4.
273 ########
274 # sv.c
275 use warnings 'redefine' ;
276 sub fred {}  
277 sub joe {} 
278 *fred = \&joe ;
279 no warnings 'redefine' ;
280 sub jim {} 
281 *jim = \&joe ;
282 EXPECT
283 Subroutine main::fred redefined at - line 5.
284 ########
285 # sv.c
286 use warnings 'printf' ;
287 open F, ">".($^O eq 'VMS'? 'NL:' : '/dev/null') ;
288 printf F "%y\n" ;
289 my $a = sprintf "%y" ;
290 printf F "%" ;
291 $a = sprintf "%" ;
292 printf F "%\x02" ;
293 $a = sprintf "%\x02" ;
294 printf F "%lly" ;
295 $a = sprintf "%lly" ;
296 printf F "%25lly" ;
297 $a = sprintf "%25lly" ;
298 printf F "%+2Ly" ;
299 $a = sprintf "%+2Ly" ;
300 printf F "%+2ll" ;
301 $a = sprintf "%+2ll" ;
302 printf F "%+2L\x03" ;
303 $a = sprintf "%+2L\x03" ;
304 no warnings 'printf' ;
305 printf F "%y\n" ;
306 $a = sprintf "%y" ;
307 printf F "%" ;
308 $a = sprintf "%" ;
309 printf F "%\x02" ;
310 $a = sprintf "%\x02" ;
311 printf F "%lly" ;
312 $a = sprintf "%lly" ;
313 printf F "%25lly" ;
314 $a = sprintf "%25lly" ;
315 printf F "%+2Ly" ;
316 $a = sprintf "%+2Ly" ;
317 printf F "%+2ll" ;
318 $a = sprintf "%+2ll" ;
319 printf F "%+2L\x03" ;
320 $a = sprintf "%+2L\x03" ;
321 EXPECT
322 Invalid conversion in printf: "%y" at - line 4.
323 Invalid conversion in sprintf: "%y" at - line 5.
324 Invalid conversion in printf: end of string at - line 6.
325 Invalid conversion in sprintf: end of string at - line 7.
326 Invalid conversion in printf: "%\002" at - line 8.
327 Invalid conversion in sprintf: "%\002" at - line 9.
328 Invalid conversion in printf: "%lly" at - line 10.
329 Invalid conversion in sprintf: "%lly" at - line 11.
330 Invalid conversion in printf: "%25lly" at - line 12.
331 Invalid conversion in sprintf: "%25lly" at - line 13.
332 Invalid conversion in printf: "%+2Ly" at - line 14.
333 Invalid conversion in sprintf: "%+2Ly" at - line 15.
334 Invalid conversion in printf: "%+2ll" at - line 16.
335 Invalid conversion in sprintf: "%+2ll" at - line 17.
336 Invalid conversion in printf: "%+2L\003" at - line 18.
337 Invalid conversion in sprintf: "%+2L\003" at - line 19.
338 ########
339 # sv.c
340 use warnings 'misc' ;
341 *a = undef ;
342 no warnings 'misc' ;
343 *b = undef ;
344 EXPECT
345 Undefined value assigned to typeglob at - line 3.
346 ########
347 # sv.c
348 use warnings 'numeric' ;
349 $a = "\x{100}\x{200}" * 42;
350 no warnings 'numeric' ;
351 $a = "\x{100}\x{200}" * 42;
352 EXPECT
353 Argument "\x{100}\x{200}" isn't numeric in multiplication (*) at - line 3.
354 ########
355 # sv.c
356 use warnings 'numeric' ;
357 $a = "\x{100}\x{200}"; $a = -$a;
358 no warnings 'numeric' ;
359 $a = "\x{100}\x{200}"; $a = -$a;
360 EXPECT
361 Argument "\x{100}\x{200}" isn't numeric in negation (-) at - line 3.
362 ########
363 # sv.c
364 use warnings 'redefine' ;
365 use utf8;
366 use open qw( :utf8 :std );
367 sub frèd {}  
368 sub jòè {} 
369 *frèd = \&jòè;
370 no warnings 'redefine' ;
371 sub jìm {} 
372 *jìm = \&jòè ;
373 EXPECT
374 Subroutine main::frèd redefined at - line 7.
375 ########
376 # sv.c
377 use warnings 'redefine' ;
378 use utf8;
379 use open qw( :utf8 :std );
380 sub f렏 {}  
381 sub 조Ȩ {} 
382 *f렏 = \&조Ȩ ;
383 no warnings 'redefine' ;
384 sub 짐 {} 
385 *짐 = \&조Ȩ ;
386 EXPECT
387 Subroutine main::f렏 redefined at - line 7.