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