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

$_[$ref] warnings discrepancy #12591

Closed
p5pRT opened this issue Nov 18, 2012 · 6 comments
Closed

$_[$ref] warnings discrepancy #12591

p5pRT opened this issue Nov 18, 2012 · 6 comments

Comments

@p5pRT
Copy link

p5pRT commented Nov 18, 2012

Migrated from rt.perl.org#115810 (status was 'rejected')

Searchable as RT115810$

@p5pRT
Copy link
Author

p5pRT commented Nov 18, 2012

From @cpansprout

Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[[]]'
Use of reference "ARRAY(0x802a00)" as array index at -e line 1.
Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[$/=[]]'
Pint​:perl.git-copy sprout$

I would expect the same output from both.


Flags​:
  category=core
  severity=low


Site configuration information for perl 5.17.6​:

Configured by sprout at Sat Nov 17 23​:09​:15 PST 2012.

Summary of my perl5 (revision 5 version 17 subversion 6) configuration​:
  Local Commit​: e1d8196c98d7cc6d34eedc83ba4193885673d43d
  Ancestor​: 10ffaf9
  Platform​:
  osname=darwin, osvers=10.5.0, archname=darwin-thread-multi-2level
  uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0​: fri nov 5 23​:20​:39 pdt 2010; root​:xnu-1504.9.17~1release_i386 i386 '
  config_args='-de -DDEBUGGING -Duseithreads -Dusedevel -Accflags= -fcatch-undefined-behavior -DPERL_POISON'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=define, usemultiplicity=define
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='gcc', ccflags ='-DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
  optimize='-O3 -g',
  cppflags='-DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
  ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
  libpth=/usr/local/lib /usr/lib
  libs=-ldbm -ldl -lm -lutil -lc
  perllibs=-ldl -lm -lutil -lc
  libc=, so=dylib, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'

Locally applied patches​:
 


@​INC for perl 5.17.6​:
  /usr/local/lib/perl5/site_perl/5.17.6/darwin-thread-multi-2level
  /usr/local/lib/perl5/site_perl/5.17.6
  /usr/local/lib/perl5/5.17.6/darwin-thread-multi-2level
  /usr/local/lib/perl5/5.17.6
  /usr/local/lib/perl5/site_perl
  .


Environment for perl 5.17.6​:
  DYLD_LIBRARY_PATH (unset)
  HOME=/Users/sprout
  LANG=en_US.UTF-8
  LANGUAGE (unset)
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/local/bin​:/usr/X11/bin​:/usr/local/bin
  PERL_BADLANG (unset)
  SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Sep 27, 2016

From @dcollinsn

On Sun Nov 18 14​:38​:27 2012, sprout wrote​:

Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[[]]'
Use of reference "ARRAY(0x802a00)" as array index at -e line 1.
Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[$/=[]]'
Pint​:perl.git-copy sprout$

I would expect the same output from both.

---
Flags​:
category=core
severity=low
---
Site configuration information for perl 5.17.6​:

Configured by sprout at Sat Nov 17 23​:09​:15 PST 2012.

Summary of my perl5 (revision 5 version 17 subversion 6)
configuration​:
Local Commit​: e1d8196c98d7cc6d34eedc83ba4193885673d43d
Ancestor​: 10ffaf9
Platform​:
osname=darwin, osvers=10.5.0, archname=darwin-thread-multi-2level
uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0​: fri
nov 5 23​:20​:39 pdt 2010; root​:xnu-1504.9.17~1release_i386 i386 '
config_args='-de -DDEBUGGING -Duseithreads -Dusedevel -Accflags=
-fcatch-undefined-behavior -DPERL_POISON'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define,
usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler​:
cc='gcc', ccflags ='-DDEBUGGING -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include',
optimize='-O3 -g',
cppflags='-DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector
-I/usr/local/include'
ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define,
longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries​:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-
protector -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking​:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup
-L/usr/local/lib -fstack-protector'

Locally applied patches​:

---
@​INC for perl 5.17.6​:
/usr/local/lib/perl5/site_perl/5.17.6/darwin-thread-multi-2level
/usr/local/lib/perl5/site_perl/5.17.6
/usr/local/lib/perl5/5.17.6/darwin-thread-multi-2level
/usr/local/lib/perl5/5.17.6
/usr/local/lib/perl5/site_perl
.

---
Environment for perl 5.17.6​:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/sprout
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/local/bin​:/usr/X11/bin​:/usr/local/bin
PERL_BADLANG (unset)
SHELL=/bin/bash

The latter is now a compile time error, since 5.19.9​:

  Setting $/ to an ARRAY reference is forbidden at -e line 1

Some special variables still produce no warning or error, including $$, so I do not know if this is fixed.

--
Respectfully,
Dan Collins

@p5pRT
Copy link
Author

p5pRT commented Sep 27, 2016

From [Unknown Contact. See original ticket]

On Sun Nov 18 14​:38​:27 2012, sprout wrote​:

Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[[]]'
Use of reference "ARRAY(0x802a00)" as array index at -e line 1.
Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[$/=[]]'
Pint​:perl.git-copy sprout$

I would expect the same output from both.

---
Flags​:
category=core
severity=low
---
Site configuration information for perl 5.17.6​:

Configured by sprout at Sat Nov 17 23​:09​:15 PST 2012.

Summary of my perl5 (revision 5 version 17 subversion 6)
configuration​:
Local Commit​: e1d8196c98d7cc6d34eedc83ba4193885673d43d
Ancestor​: 10ffaf9
Platform​:
osname=darwin, osvers=10.5.0, archname=darwin-thread-multi-2level
uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0​: fri
nov 5 23​:20​:39 pdt 2010; root​:xnu-1504.9.17~1release_i386 i386 '
config_args='-de -DDEBUGGING -Duseithreads -Dusedevel -Accflags=
-fcatch-undefined-behavior -DPERL_POISON'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define,
usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler​:
cc='gcc', ccflags ='-DDEBUGGING -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include',
optimize='-O3 -g',
cppflags='-DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector
-I/usr/local/include'
ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define,
longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries​:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-
protector -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking​:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup
-L/usr/local/lib -fstack-protector'

Locally applied patches​:

---
@​INC for perl 5.17.6​:
/usr/local/lib/perl5/site_perl/5.17.6/darwin-thread-multi-2level
/usr/local/lib/perl5/site_perl/5.17.6
/usr/local/lib/perl5/5.17.6/darwin-thread-multi-2level
/usr/local/lib/perl5/5.17.6
/usr/local/lib/perl5/site_perl
.

---
Environment for perl 5.17.6​:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/sprout
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/local/bin​:/usr/X11/bin​:/usr/local/bin
PERL_BADLANG (unset)
SHELL=/bin/bash

The latter is now a compile time error, since 5.19.9​:

  Setting $/ to an ARRAY reference is forbidden at -e line 1

Some special variables still produce no warning or error, including $$, so I do not know if this is fixed.

--
Respectfully,
Dan Collins

@p5pRT
Copy link
Author

p5pRT commented Mar 21, 2017

From @iabyn

On Tue, Sep 27, 2016 at 10​:04​:10AM -0700, Dan Collins via RT wrote​:

On Sun Nov 18 14​:38​:27 2012, sprout wrote​:

Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[[]]'
Use of reference "ARRAY(0x802a00)" as array index at -e line 1.
Pint​:perl.git-copy sprout$ ./perl -Ilib -we '() = $_[$/=[]]'
Pint​:perl.git-copy sprout$

I would expect the same output from both.

The latter is now a compile time error, since 5.19.9​:

Setting $/ to an ARRAY reference is forbidden at \-e line 1

Some special variables still produce no warning or error, including $$,
so I do not know if this is fixed.

The behaviour is intentional​: if the index variable has get or overload
magic, then the warning is skipped, since the 'ref' may return something
other than a large integer when used in numeric context.

Closing.

--
This email is confidential, and now that you have read it you are legally
obliged to shoot yourself. Or shoot a lawyer, if you prefer. If you have
received this email in error, place it in its original wrapping and return
for a full refund. By opening this email, you accept that Elvis lives.

@p5pRT p5pRT closed this as completed Mar 21, 2017
@p5pRT
Copy link
Author

p5pRT commented Mar 21, 2017

@iabyn - Status changed from 'new' to 'rejected'

@p5pRT
Copy link
Author

p5pRT commented Mar 22, 2017

From @cpansprout

On Tue, 21 Mar 2017 05​:05​:50 -0700, davem wrote​:

The behaviour is intentional​: if the index variable has get or overload
magic, then the warning is skipped, since the 'ref' may return something
other than a large integer when used in numeric context.

Closing.

The overloading check makes sense. But pp_aelem has to call get-magic anyway before it can proceed, and there is still the problem that tied variables won’t get the warning. Many people use tied variables (sometimes without realizing it) by using modules that provide tie interfaces. There is no reason not to provide the helpful warning in such cases, since it is an easy mistake to make.

This email is confidential, and now that you have read it you are legally
obliged to shoot yourself.

Will do.

--

Father Chrysostomos

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