fix /.\G/ under threading
authorDavid Mitchell <davem@iabyn.com>
Thu, 20 Jun 2013 12:33:31 +0000 (13:33 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 28 Jul 2013 09:33:36 +0000 (10:33 +0100)
When a regex was being duped, it's (constant) gofs field wasn't being
copied, but rather was being set to zero. Skip this and lots of TODO tests
pass.

regcomp.c
t/re/pat.t

index be45caa..90e6c9a 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -15281,7 +15281,6 @@ Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS *param)
               so we need to copy it locally.  */
     RX_WRAPPED(dstr) = SAVEPVN(RX_WRAPPED(sstr), SvCUR(sstr)+1);
     ret->mother_re   = NULL;
-    ret->gofs = 0;
 }
 #endif /* PERL_IN_XSUB_RE */
 
index 8793f94..a96b758 100644 (file)
@@ -726,8 +726,6 @@ sub run_tests {
         like($str, qr/^..\G/, $message);
         unlike($str, qr/^...\G/, $message);
         ok($str =~ /\G../ && $& eq 'cd', $message);
-
-        local $::TODO = $::running_as_thread;
         ok($str =~ /.\G./ && $& eq 'bc', $message);
     }
 
@@ -799,22 +797,19 @@ sub run_tests {
         my $message = '\G anchor checks';
         my $foo = 'aabbccddeeffgg';
         pos ($foo) = 1;
-        {
-            local $::TODO = $::running_as_thread;
-            no warnings 'uninitialized';
-            ok($foo =~ /.\G(..)/g, $message);
-            is($1, 'ab', $message);
 
-            pos ($foo) += 1;
-            ok($foo =~ /.\G(..)/g, $message);
-            is($1, 'cc', $message);
+       ok($foo =~ /.\G(..)/g, $message);
+       is($1, 'ab', $message);
 
-            pos ($foo) += 1;
-            ok($foo =~ /.\G(..)/g, $message);
-            is($1, 'de', $message);
+       pos ($foo) += 1;
+       ok($foo =~ /.\G(..)/g, $message);
+       is($1, 'cc', $message);
 
-            ok($foo =~ /\Gef/g, $message);
-        }
+       pos ($foo) += 1;
+       ok($foo =~ /.\G(..)/g, $message);
+       is($1, 'de', $message);
+
+       ok($foo =~ /\Gef/g, $message);
 
         undef pos $foo;
         ok($foo =~ /\G(..)/g, $message);