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
authorDavid Mitchell <davem@iabyn.com>
Thu, 1 Jun 2017 10:55:47 +0000 (11:55 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 7 Jun 2017 08:11:08 +0000 (09:11 +0100)
commit0ea396d546f6a934fa5f1ab7da5002f4efa0ae53
tree42c2c18b5211d40d6cf675f389a0f94e90c54018
parent812b6f860c7670da1dccb63f390945b7ba3a038d
Perl_sv_vcatpvfn_flags: simpler redundant arg test

5.24.0 added a new warning:

    Redundant argument in printf at ....

That warning is issued if there are more args than format elements.
However, it may also warn for invalid format - e.g. for something like
printf("%Z%d", 1,2) you get both

    Invalid conversion in printf: "%Z" at ...
    Redundant argument in printf at ...

Personally I think once once part of the format has been determined to be
invalid, its hard for perl to second-guess in what way the format was
invalid, and thus to be able to conclude that there is in fact a redundant
arg.

So this commit commit suppresses any "redundant" warning once an "invalid"
warning has been issued.

Doing this makes it possible to simplify the code and remove the
used_explicit_ix variable.

Apart from warnings, used_explicit_ix was only used in %p to check for
'simple' special forms - but that code checks for a trailing '$' character
anyway, so that test was redundant.
sv.c
t/op/sprintf.t
t/op/sprintf2.t