Make SimplifyWalker::SimplifyRepeat() use Regexp::Concat().

This builds a two-level tree for very large numbers of
subexpressions. When min is greater than 65535 due to
coalescing, for example.

This bug was discovered by the LLVM fuzzer.

Change-Id: I7e21d24f6546b9d8f3a3d844e0ed5c6af246aa1e
Reviewed-on: https://code-review.googlesource.com/9890
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/simplify.cc b/re2/simplify.cc
index 06f0386..910ebcc 100644
--- a/re2/simplify.cc
+++ b/re2/simplify.cc
@@ -589,12 +589,12 @@
       return Regexp::Plus(re->Incref(), f);
 
     // General case: x{4,} is xxxx+
-    Regexp* nre = new Regexp(kRegexpConcat, f);
-    nre->AllocSub(min);
-    Regexp** nre_subs = nre->sub();
+    Regexp** nre_subs = new Regexp*[min];
     for (int i = 0; i < min-1; i++)
       nre_subs[i] = re->Incref();
     nre_subs[min-1] = Regexp::Plus(re->Incref(), f);
+    Regexp* nre = Regexp::Concat(nre_subs, min, f);
+    delete[] nre_subs;
     return nre;
   }
 
@@ -613,11 +613,11 @@
   // Build leading prefix: xx.  Capturing only on the last one.
   Regexp* nre = NULL;
   if (min > 0) {
-    nre = new Regexp(kRegexpConcat, f);
-    nre->AllocSub(min);
-    Regexp** nre_subs = nre->sub();
+    Regexp** nre_subs = new Regexp*[min];
     for (int i = 0; i < min; i++)
       nre_subs[i] = re->Incref();
+    nre = Regexp::Concat(nre_subs, min, f);
+    delete[] nre_subs;
   }
 
   // Build and attach suffix: (x(x(x)?)?)?