Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'Masks earlier declaration' warning move from misc to syntax #14735

Closed
p5pRT opened this issue Jun 4, 2015 · 17 comments
Closed

'Masks earlier declaration' warning move from misc to syntax #14735

p5pRT opened this issue Jun 4, 2015 · 17 comments

Comments

@p5pRT
Copy link

p5pRT commented Jun 4, 2015

Migrated from rt.perl.org#125330 (status was 'resolved')

Searchable as RT125330$

@p5pRT
Copy link
Author

p5pRT commented Jun 4, 2015

From @epa

Created by @epa

Perl has a compile-time warning

  "my" variable $x masks earlier declaration in same scope

I had hoped this to be under the 'syntax' warning category, but it is
under 'misc'. That gets in the way of making it a fatal warning. (In
my opinion, fatal checks at compile time are a good thing, but the
perils of fatal runtime warnings have often been discussed.)

Thus​:

  % perl -e 'use warnings FATAL => "syntax"; my $x; my $x' && echo yes
  yes
  % perl -e 'use warnings FATAL => "misc"; my $x; my $x' && echo yes
  "my" variable $x masks earlier declaration in same scope at -e line 1.

Is it possible this warning could migrate from the 'misc' category to
the 'syntax' category?

If that is not possible, could 'misc' have a subdivision in the
warnings category tree, so this one can go into 'misc_compile_time'?
Then I could fatalize that category too.

Or conceivably, a new top-level category 'compile_time' or 'static'
could be created, with 'syntax' becoming a subcategory of that, and
the 'masks earlier declaration' warning moving into the compile_time
category.

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.10.1:

Configured by Debian Project at Wed Mar  6 15:31:28 UTC 2013.

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:
   
  Platform:
    osname=linux, osvers=3.2.0-4-amd64, archname=x86_64-linux-gnu-thread-multi
    uname='linux madeleine 3.2.0-4-amd64 #1 smp debian 3.2.39-2 x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.4.5', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.11.3.so, so=so, useshrplib=true, libperl=libperl.so.5.10.1
    gnulibc_version='2.11.3'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'

Locally applied patches:
    DEBPKG:debian/arm_thread_stress_timeout - http://bugs.debian.org/501970 Raise the timeout of ext/threads/shared/t/stress.t to accommodate slower build hosts
    DEBPKG:debian/cpan_config_path - Set location of CPAN::Config to /etc/perl as /usr may not be writable.
    DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN.
    DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly restrictive DB_File version check.
    DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information.
    DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs to follow symlinks and ignore missing @INC directories.
    DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno version check due to upgrade problems with long-running processes.
    DEBPKG:debian/extutils_hacks - Various debian-specific ExtUtils changes
    DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets.
    DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor.
    DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy.
    DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable.
    DEBPKG:debian/m68k_thread_stress - http://bugs.debian.org/495826 Disable some threads tests on m68k for now due to missing TLS.
    DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian
    DEBPKG:debian/module_build_man_extensions - http://bugs.debian.org/479460 Adjust Module::Build manual page extensions for the Debian Perl policy
    DEBPKG:debian/perl_synopsis - http://bugs.debian.org/278323 Rearrange perl.pod
    DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list of libraries wanted to what we actually need.
    DEBPKG:debian/use_gdbm - Explicitly link against -lgdbm_compat in ODBM_File/NDBM_File. 
    DEBPKG:fixes/assorted_docs - http://bugs.debian.org/443733 [384f06a] Math::BigInt::CalcEmu documentation grammar fix
    DEBPKG:fixes/net_smtp_docs - http://bugs.debian.org/100195 [rt.cpan.org #36038] Document the Net::SMTP 'Port' option
    DEBPKG:fixes/processPL - http://bugs.debian.org/357264 [rt.cpan.org #17224] Always use PERLRUNINST when building perl modules.
    DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip include directories in /usr/local
    DEBPKG:fixes/pod2man-index-backslash - http://bugs.debian.org/521256 Escape backslashes in .IX entries
    DEBPKG:debian/disable-zlib-bundling - Disable zlib bundling in Compress::Raw::Zlib
    DEBPKG:fixes/kfreebsd_cppsymbols - http://bugs.debian.org/533098 [3b910a0] Add gcc predefined macros to $Config{cppsymbols} on GNU/kFreeBSD.
    DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org/533707 Configure CPANPLUS to use the site directories by default.
    DEBPKG:debian/cpanplus_config_path - Save local versions of CPANPLUS::Config::System into /etc/perl.
    DEBPKG:fixes/kfreebsd-filecopy-pipes - http://bugs.debian.org/537555 [16f708c] Fix File::Copy::copy with pipes on GNU/kFreeBSD
    DEBPKG:fixes/anon-tmpfile-dir - http://bugs.debian.org/528544 [perl #66452] Honor TMPDIR when open()ing an anonymous temporary file
    DEBPKG:fixes/abstract-sockets - http://bugs.debian.org/329291 [89904c0] Add support for Abstract namespace sockets.
    DEBPKG:fixes/hurd_cppsymbols - http://bugs.debian.org/544307 [eeb92b7] Add gcc predefined macros to $Config{cppsymbols} on GNU/Hurd.
    DEBPKG:fixes/autodie-flock - http://bugs.debian.org/543731 Allow for flock returning EAGAIN instead of EWOULDBLOCK on linux/parisc
    DEBPKG:fixes/archive-tar-instance-error - http://bugs.debian.org/539355 [rt.cpan.org #48879] Separate Archive::Tar instance error strings from each other
    DEBPKG:fixes/positive-gpos - http://bugs.debian.org/545234 [perl #69056] [c584a96] Fix \\G crash on first match
    DEBPKG:debian/devel-ppport-ia64-optim - http://bugs.debian.org/548943 Work around an ICE on ia64
    DEBPKG:fixes/trie-logic-match - http://bugs.debian.org/552291 [perl #69973] [0abd0d7] Fix a DoS in Unicode processing [CVE-2009-3626]
    DEBPKG:fixes/hppa-thread-eagain - http://bugs.debian.org/554218 make the threads-shared test suite more robust, fixing failures on hppa
    DEBPKG:fixes/crash-on-undefined-destroy - http://bugs.debian.org/564074 [perl #71952] [1f15e67] Fix a NULL pointer dereference when looking for a DESTROY method
    DEBPKG:fixes/tainted-errno - http://bugs.debian.org/574129 [perl #61976] [be1cf43] fix an errno stringification bug in taint mode
    DEBPKG:fixes/safe-upgrade - http://bugs.debian.org/582978 Upgrade Safe.pm to 2.25, fixing CVE-2010-1974
    DEBPKG:fixes/tell-crash - http://bugs.debian.org/578577 [f4817f3] Fix a tell() crash on bad arguments.
    DEBPKG:fixes/format-write-crash - http://bugs.debian.org/579537 [perl #22977] [421f30e] Fix a crash in format/write
    DEBPKG:fixes/arm-alignment - http://bugs.debian.org/289884 [f1c7503] Prevent gcc from optimizing the alignment test away on armel
    DEBPKG:fixes/fcgi-test - Fix a failure in CGI/t/fast.t when FCGI is installed
    DEBPKG:fixes/hurd-ccflags - http://bugs.debian.org/587901 Make hints/gnu.sh append to $ccflags rather than overriding them
    DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764 Squelch locale warnings in Debian package maintainer scripts
    DEBPKG:fixes/lc-numeric-docs - http://bugs.debian.org/379329 [perl #78452] [903eb63] LC_NUMERIC documentation fixes
    DEBPKG:fixes/lc-numeric-sprintf - http://bugs.debian.org/601549 [perl #78632] [b3fd614] Fix sprintf not to ignore LC_NUMERIC with constants
    DEBPKG:fixes/concat-stack-corruption - http://bugs.debian.org/596105 [perl #78674] [e3393f5] Fix stack pointer corruption in pp_concat() with 'use encoding'
    DEBPKG:fixes/cgi-multiline-header - http://bugs.debian.org/606995 [CVE-2010-2761 CVE-2010-4410 CVE-2010-4411] CGI.pm MIME boundary and multiline header vulnerabilities
    DEBPKG:fixes/casing-taint-cve-2011-1487 - http://bugs.debian.org/622817 [perl #87336] fix unwanted taint laundering in lc(), uc() et al.
    DEBPKG:fixes/safe-reval-rdo-cve-2010-1447 - [PATCH] Wrap by default coderefs returned by rdo and reval
    DEBPKG:fixes/encode-heap-overflow - [PATCH] Fix decode_xs n-byte heap-overflow security bug in
    DEBPKG:fixes/digest_eval_hole - Close the eval \"require $module\" security hole in
    DEBPKG:fixes/unregister_signal_handler - [PATCH] main: Unregister signal handler before destroying my_perl
    DEBPKG:fixes/CVE-2012-5195 - avoid calling memset with a negative count
    DEBPKG:fixes/CVE-2012-5526 - [PATCH 1/4] CR escaping for P3P header
    DEBPKG:fixes/storable-security-warning - [PATCH] add a note about security concerns in Storable
    DEBPKG:fixes/maketext-code-execution - Fix misparsing of maketext strings.
    DEBPKG:fixes/CVE-2013-1667 - [PATCH] Prevent premature hsplit() calls, and only trigger REHASH
    DEBPKG:patchlevel - http://bugs.debian.org/567489 List packaged patches for 5.10.1-17squeeze5 in patchlevel.h


@INC for perl 5.10.1:
    /home/ed/lib/perl/5.10.1
    /home/ed/share/perl/5.10.1
    /etc/perl
    /usr/local/lib/perl/5.10.1
    /usr/local/share/perl/5.10.1
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.10
    /usr/share/perl/5.10
    /usr/local/lib/site_perl
    /usr/local/lib/perl/5.10.0
    /usr/local/share/perl/5.10.0
    .


Environment for perl 5.10.1:
    HOME=/home/ed
    LANG=en_GB.UTF-8
    LANGUAGE (unset)
    LC_ALL=en_GB.UTF-8
    LD_LIBRARY_PATH=/home/ed/lib:/usr/local/lib
    LOGDIR (unset)
    PATH=/home/ed/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/games:/sbin:/usr/sbin
    PERL5LIB=/home/ed/lib/perl/5.10.1:/home/ed/share/perl/5.10.1
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Jun 4, 2015

From zefram@fysh.org

Ed Avis wrote​:

"my" variable $x masks earlier declaration in same scope

I had hoped this to be under the 'syntax' warning category,

It's not a syntax issue. It's semantic. But your desire to distinguish
it from other "misc" warnings is reasonable. It should probably have
a category to itself, called "shadow".

-zefram

@p5pRT
Copy link
Author

p5pRT commented Jun 4, 2015

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Jun 5, 2015

From @epa

Zefram <zefram <at> fysh.org> writes​:

"my" variable $x masks earlier declaration in same scope

I had hoped this to be under the 'syntax' warning category,

It's not a syntax issue. It's semantic. But your desire to distinguish
it from other "misc" warnings is reasonable. It should probably have
a category to itself, called "shadow".

That would help. But further, both 'shadow' and 'syntax' could move under
a new top-level warnings category 'compile_time'.

--
Ed Avis <eda@​waniasset.com>

@p5pRT
Copy link
Author

p5pRT commented Dec 10, 2015

From @jkeenan

On Thu Jun 04 23​:56​:06 2015, eda@​waniasset.com wrote​:

Zefram <zefram <at> fysh.org> writes​:

"my" variable $x masks earlier declaration in same scope

I had hoped this to be under the 'syntax' warning category,

It's not a syntax issue. It's semantic. But your desire to distinguish
it from other "misc" warnings is reasonable. It should probably have
a category to itself, called "shadow".

That would help. But further, both 'shadow' and 'syntax' could move under
a new top-level warnings category 'compile_time'.

There's been no further discussion in this RT in six months. That suggests to me that there's no compelling reason to revising the structure of our diagnostics.

I'm taking the ticket for the purpose of closing it within 7 days unless there is a strong reason to keep it open.

Thank you very much.

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Dec 10, 2015

From @epa

Is it possible to implement Zefram's suggestion?

It should probably have a category to itself, called "shadow".

@p5pRT
Copy link
Author

p5pRT commented Dec 10, 2015

From @epa

The attached patch makes a new warnings category 'shadow' and moves three 'redefined' warnings from 'misc' to 'shadow'. Please could someone review it?

@p5pRT
Copy link
Author

p5pRT commented Dec 10, 2015

From @epa

warnings_category_shadow.diff

@p5pRT
Copy link
Author

p5pRT commented Dec 14, 2015

From @rjbs

* Ed Avis via RT <perlbug-followup@​perl.org> [2015-12-10T07​:10​:29]

The attached patch makes a new warnings category 'shadow' and moves three
'redefined' warnings from 'misc' to 'shadow'. Please could someone review
it?

My first pass of review​: looked mostly good, but...

Made me wonder, though​: what's the purpose of warning on "our $x; our $x;"?

Is the idea "you probably meant something other than $x for one of them? and
since you'll read it elsewhere with a fully qualified name, you won't get a
declaration error there, so we give you one here"?

It's not really a shadowing, so I think the "shadow" category doesn't make
sense.

--
rjbs

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2015

From zefram@fysh.org

Ricardo Signes wrote​:

Made me wonder, though​: what's the purpose of warning on "our $x; our $x;"?
...
It's not really a shadowing, so I think the "shadow" category doesn't make
sense.

It *is* shadowing; it just happens that the two declarations have
identical effect, so the shadowing doesn't make any difference. If a
package declaration changed package between the two then they'd have
different effect, and you'd presumably be happy calling that shadowing.

-zefram

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2015

From @epa

Do you want me to prepare a new patch that leaves 'our $x; our $x' in the
'misc' warnings category?

If not, is there anything else you'd like to see fixed before the patch
can be applied?

--
Ed Avis <eda@​waniasset.com>

@p5pRT
Copy link
Author

p5pRT commented Dec 18, 2015

From @rjbs

* Ed Avis <eda@​waniasset.com> [2015-12-15T05​:39​:12]

Do you want me to prepare a new patch that leaves 'our $x; our $x' in the
'misc' warnings category?

If not, is there anything else you'd like to see fixed before the patch
can be applied?

I don't see a problem with this commit. Any objections before it's applied?

--
rjbs

@p5pRT
Copy link
Author

p5pRT commented Jun 9, 2017

From @epa

This bug has a patch waiting to be applied but I don't think it did get applied; could the current pumpking have another look please?

@p5pRT
Copy link
Author

p5pRT commented Dec 6, 2017

From zefram@fysh.org

I have applied a slightly modified version of Ed's patch as commit
52e3acf.

-zefram

@p5pRT
Copy link
Author

p5pRT commented Dec 6, 2017

@cpansprout - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2018

From @khwilliamson

Thank you for filing this report. You have helped make Perl better.

With the release yesterday of Perl 5.28.0, this and 185 other issues have been
resolved.

Perl 5.28.0 may be downloaded via​:
https://metacpan.org/release/XSAWYERX/perl-5.28.0

If you find that the problem persists, feel free to reopen this ticket.

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2018

@khwilliamson - Status changed from 'pending release' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant