This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: Cygwin PerlIO.t failing
[perl5.git] / doop.c
diff --git a/doop.c b/doop.c
index 7a8f883..20379a9 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -754,7 +754,7 @@ Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size)
 #ifdef UV_IS_QUAD
            else if (size == 64) {
                if (ckWARN(WARN_PORTABLE))
-                   Perl_warner(aTHX_ WARN_PORTABLE,
+                   Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
                                "Bit vector size > 32 non-portable");
                if (offset >= srclen)
                    retnum = 0;
@@ -823,7 +823,7 @@ Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size)
 #ifdef UV_IS_QUAD
        else if (size == 64) {
            if (ckWARN(WARN_PORTABLE))
-               Perl_warner(aTHX_ WARN_PORTABLE,
+               Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
                            "Bit vector size > 32 non-portable");
            retnum =
                ((UV) s[offset    ] << 56) +
@@ -910,7 +910,7 @@ Perl_do_vecset(pTHX_ SV *sv)
 #ifdef UV_IS_QUAD
        else if (size == 64) {
            if (ckWARN(WARN_PORTABLE))
-               Perl_warner(aTHX_ WARN_PORTABLE,
+               Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
                            "Bit vector size > 32 non-portable");
            s[offset  ] = (lval >> 56) & 0xff;
            s[offset+1] = (lval >> 48) & 0xff;
@@ -1336,8 +1336,19 @@ Perl_do_kv(pTHX)
     PUTBACK;   /* hv_iternext and hv_iterval might clobber stack_sp */
     while ((entry = hv_iternext(keys))) {
        SPAGAIN;
-       if (dokeys)
-           XPUSHs(hv_iterkeysv(entry));        /* won't clobber stack_sp */
+       if (dokeys) {
+           SV* sv = hv_iterkeysv(entry);
+           if (HvUTF8KEYS((SV*)hv) && !DO_UTF8(sv)) {
+               STRLEN len, i;
+               char* s = SvPV(sv, len);
+               for (i = 0; i < len && NATIVE_IS_INVARIANT(s[i]); i++);
+               if (i < len) {
+                   sv = newSVsv(sv);
+                   sv_utf8_upgrade(sv);
+               }
+           }
+           XPUSHs(sv); /* won't clobber stack_sp */
+       }
        if (dovalues) {
            PUTBACK;
            tmpstr = realhv ?