/* ... pp_deref (aelem,helem,rv2sv,padsv) .................................. */
-STATIC const char a_msg_forbidden[] = "Reference vivification forbidden";
-STATIC const char a_msg_impossible[] = "Can't vivify reference";
-
STATIC OP *a_pp_deref(pTHX) {
a_op_info oi;
UV flags;
SPAGAIN;
if (!SvOK(TOPs)) {
if (flags & A_HINT_STRICT)
- croak(a_msg_forbidden);
+ croak("Reference vivification forbidden");
else if (flags & A_HINT_WARN)
- warn(a_msg_forbidden);
+ warn("Reference was vivified");
else /* A_HINT_STORE */
- croak(a_msg_impossible);
+ croak("Can't vivify reference");
}
}
use strict;
use warnings;
-use Test::More tests => 4;
+use Test::More tests => 8;
use lib 't/lib';
+{
+ my @w;
+ my $x;
+ my $res = eval {
+ local $SIG{__WARN__} = sub { push @w, join '', 'warn:', @_ };
+ no autovivification qw/warn fetch/;
+ $x->{a};
+ };
+ is @w, 1, 'warned only once';
+ like $w[0], qr/^warn:Reference was vivified at \Q$0\E line ${\(__LINE__-3)}/,
+ 'warning looks correct';
+ is_deeply $x, undef, 'didn\'t vivified';
+ is $res, undef, 'returned undef';
+}
+
our $blurp;
{
$expect->{r2_eval} = { } if $] < 5.009005;
is_deeply $blurp, $expect, 'second require test didn\'t vivify';
}
-