Subject: bug#16481: dfa.c and Rational Range Interpretation

From: Paul Eggert <[email-masked]>
Date: Mon, 20 Jan 2014 09:35:43 -0800

Aharon Robbins wrote:

> What happens if you compile them in and run the grep test suite?

The test suite passes, but grep is bigger and (I presume) slower.  The 
GREP-related changes are for performance, and shouldn't affect behavior.

How about if we apply the attached patch to dfa.c, in both gawk and 
grep?  I tried it just now, and gawk passed all its tests too.  Or, if 
there's some reason this patch would introduce a bug into gawk, I'd like 
to fix the grep test cases to detect the bug.
diff --git a/dfa.c b/dfa.c
index ac1cf9a..f84ccd2 100644
--- a/dfa.c
+++ b/dfa.c
@@ -1135,18 +1135,6 @@ parse_bracket_exp (void)
                 case_fold ? towlower (wc) : (wchar_t) wc;
               work_mbc->range_ends[work_mbc->nranges++] =
                 case_fold ? towlower (wc2) : (wchar_t) wc2;
-
-#ifndef GREP
-              if (case_fold && (iswalpha (wc) || iswalpha (wc2)))
-                {
-                  REALLOC_IF_NECESSARY (work_mbc->range_sts,
-                                        range_sts_al, work_mbc->nranges + 1);
-                  work_mbc->range_sts[work_mbc->nranges] = towupper (wc);
-                  REALLOC_IF_NECESSARY (work_mbc->range_ends,
-                                        range_ends_al, work_mbc->nranges + 1);
-                  work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2);
-                }
-#endif
             }
           else
             {
@@ -1182,11 +1170,7 @@ parse_bracket_exp (void)
                                     work_mbc->nchars + 1);
               work_mbc->chars[work_mbc->nchars++] = wc;
             }
-#ifdef GREP
           continue;
-#else
-          wc = towupper (wc);
-#endif
         }
       if (!setbit_wc (wc, ccl))
         {
@@ -1780,14 +1764,6 @@ atom (void)
   else if (MBS_SUPPORT && tok == WCHAR)
     {
       addtok_wc (case_fold ? towlower (wctok) : wctok);
-#ifndef GREP
-      if (case_fold && iswalpha (wctok))
-        {
-          addtok_wc (towupper (wctok));
-          addtok (OR);
-        }
-#endif
-
       tok = lex ();
     }
   else if (MBS_SUPPORT && tok == ANYCHAR && using_utf8 ())