This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
av.c: silence compiler warning
authorYves Orton <demerphq@gmail.com>
Thu, 1 Jun 2017 14:28:21 +0000 (16:28 +0200)
committerYves Orton <demerphq@gmail.com>
Thu, 1 Jun 2017 15:17:34 +0000 (17:17 +0200)
av.c: In function ‘Perl_av_undef’:
av.c:577:35: warning: ‘orig_ix’ may be used uninitialized in this function [-Wmaybe-uninitialized]
             PL_tmps_stack[orig_ix] = &PL_sv_undef;

The warning is bogus, as we only use the orig_ix if real is true,
and if real is true we will have set orig_ix. But it doesnt cost
much to initialize it always and shut up the compiler.

av.c

diff --git a/av.c b/av.c
index 5afae8d..cf3386c 100644 (file)
--- a/av.c
+++ b/av.c
@@ -542,7 +542,7 @@ void
 Perl_av_undef(pTHX_ AV *av)
 {
     bool real;
-    SSize_t orig_ix;
+    SSize_t orig_ix = PL_tmps_ix; /* silence bogus warning about possible unitialized use */
 
     PERL_ARGS_ASSERT_AV_UNDEF;
     assert(SvTYPE(av) == SVt_PVAV);
@@ -551,7 +551,8 @@ Perl_av_undef(pTHX_ AV *av)
     if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied)) 
        av_fill(av, -1);
 
-    if ((real = cBOOL(AvREAL(av)))) {
+    real = cBOOL(AvREAL(av));
+    if (real) {
        SSize_t key = AvFILLp(av) + 1;
 
         /* avoid av being freed when calling destructors below */