This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Perl_sv_vcatpvfn_flags: simpler redundant arg test
[perl5.git] / sv.c
diff --git a/sv.c b/sv.c
index de02119..af8c7ee 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -11938,7 +11938,6 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
        STRLEN width     = 0;         /* value of "%NNN..."  */
        bool has_precis  = FALSE;     /* has      "%.NNN..." */
        STRLEN precis    = 0;         /* value of "%.NNN..." */
-        bool used_explicit_ix = FALSE;/* has      "%n$..."   */
        int base         = 0;         /* base to print in, e.g. 8 for %o */
        UV uv            = 0;         /* the value to print of int-ish args */
 
@@ -12000,7 +11999,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                ++q;
                efix = (Size_t)width;
                 width = 0;
-                used_explicit_ix = TRUE;
+                no_redundant_warning = TRUE;
            } else {
                goto gotwidth;
            }
@@ -12065,7 +12064,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                     if (args)
                         Perl_croak_nocontext(
                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
-                    used_explicit_ix = TRUE;
+                    no_redundant_warning = TRUE;
                 } else
                    goto unknown;
             }
@@ -12150,7 +12149,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                         if (args)
                             Perl_croak_nocontext(
                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
-                        used_explicit_ix = TRUE;
+                        no_redundant_warning = TRUE;
                     } else
                         goto unknown;
                 }
@@ -12364,7 +12363,6 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                     /* not %*p or %*1$p - any width was explicit */
                 && q[-2] != '*'
                 && q[-2] != '$'
-                && !used_explicit_ix
             ) {
                 if (left) {                    /* %-p (SVf), %-NNNp */
                     if (width) {
@@ -13227,6 +13225,9 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
             sv_catpvn_nomg(sv, p, 1);
             q = p + 1;
            svix = osvix;
+            /* Any "redundant arg" warning from now onwards will probably
+             * just be misleading, so don't bother. */
+            no_redundant_warning = TRUE;
            continue;   /* not "break" */
        }
 
@@ -13330,8 +13331,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
        }
 
       donevalidconversion:
-        if (used_explicit_ix)
-            no_redundant_warning = TRUE;
+
         if (arg_missing)
             S_warn_vcatpvfn_missing_argument(aTHX);
     }