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

ck_rvconst rejects glob-as-scalar #9891

Closed
p5pRT opened this issue Sep 28, 2009 · 8 comments
Closed

ck_rvconst rejects glob-as-scalar #9891

p5pRT opened this issue Sep 28, 2009 · 8 comments

Comments

@p5pRT
Copy link

p5pRT commented Sep 28, 2009

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

Searchable as RT69456$

@p5pRT
Copy link
Author

p5pRT commented Sep 28, 2009

From zefram@fysh.org

Created by zefram@fysh.org

I'm doing some XS work that involves generating rv2sv ops where the
reference is a const op holding an RV that points at a suitable SV.
If the suitable SV is a GV, ck_rvconst rejects it, saying "Constant is
not a SCALAR reference". Actually GVs are valid as scalars​:

$ perl -lwe '$foo=123; $glob=*foo; print ${*{\$glob}{SCALAR}}'
123

so I reckon ck_rvconst should not be rejecting it. It should probably
also allow SVt_PVLV scalars.

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.10.0:

Configured by Debian Project at Fri Aug 28 22:30:10 UTC 2009.

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.6.26-2-amd64, archname=i486-linux-gnu-thread-multi
    uname='linux puccini 2.6.26-2-amd64 #1 smp fri aug 14 07:12:04 utc 2009 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-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.0 -Dsitearch=/usr/local/lib/perl/5.10.0 -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.0 -Dd_dosuid -des'
    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='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -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 -I/usr/local/include'
    ccversion='', gccversion='4.3.2', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /usr/lib64
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.7.so, so=so, useshrplib=true, libperl=libperl.so.5.10.0
    gnulibc_version='2.7'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib'

Locally applied patches:
    


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


Environment for perl 5.10.0:
    HOME=/home/zefram
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/zefram/pub/i686-pc-linux-gnu/bin:/home/zefram/pub/common/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/local/bin:/usr/games
    PERL_BADLANG (unset)
    SHELL=/usr/bin/zsh

@p5pRT
Copy link
Author

p5pRT commented Nov 11, 2009

sgc294@internode.on.net - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Jul 3, 2013

From @cpansprout

On Mon Sep 28 15​:34​:35 2009, zefram@​fysh.org wrote​:

This is a bug report for perl from zefram@​fysh.org,
generated with the help of perlbug 1.36 running under perl 5.10.0.

-----------------------------------------------------------------
[Please enter your report here]

I'm doing some XS work that involves generating rv2sv ops where the
reference is a const op holding an RV that points at a suitable SV.
If the suitable SV is a GV, ck_rvconst rejects it, saying "Constant is
not a SCALAR reference". Actually GVs are valid as scalars​:

$ perl -lwe '$foo=123; $glob=*foo; print ${*{\$glob}{SCALAR}}'
123

so I reckon ck_rvconst should not be rejecting it. It should probably
also allow SVt_PVLV scalars.

It also breaks things like this​:

use constant foo=>\$_;
bless \$_;
use overload '@​{}' => sub { [1,2,3] };
print foo->[1], "\n";

Why shouldn’t that work? I suggest removing that compile time check
altogether (but still making sure references don’t fall through to the
bareword lookup [come to think of it, other stuff probably also makes
its way through that code path erroneously (such as globs)]).

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Aug 25, 2014

From @cpansprout

Fixed in eff7547.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Aug 25, 2014

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

@p5pRT
Copy link
Author

p5pRT commented Aug 25, 2014

From @cpansprout

On Tue Jul 02 22​:32​:04 2013, I wrote​:

[come to think of it, other stuff probably also makes
its way through that code path erroneously (such as globs)]).

That is fixed in acb187b.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jun 2, 2015

From @khwilliamson

Thanks for submitting this ticket

The issue should be resolved with the release today of Perl v5.22. If you find that the problem persists, feel free to reopen this ticket

--
Karl Williamson for the Perl 5 porters team

@p5pRT
Copy link
Author

p5pRT commented Jun 2, 2015

@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