From 9c74ee552a773ce1568b408b76992913076c176e Mon Sep 17 00:00:00 2001
From: Andrea Shepard <andrea@persephoneslair.org>
Date: Sun, 20 Nov 2016 07:18:00 +0000
Subject: [PATCH] Avoid redundant charset copy (and leak) in
 h_llvm_build_charset_exec_plan_impl_alloc();
 h_llvm_build_charset_exec_plan_impl() already knows to do this

---
 src/backends/llvm.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/backends/llvm.c b/src/backends/llvm.c
index 0ae899e3..1b5db1b8 100644
--- a/src/backends/llvm.c
+++ b/src/backends/llvm.c
@@ -380,11 +380,15 @@ static llvm_charset_exec_plan_t * h_llvm_build_charset_exec_plan_impl_alloc(
 
   cep = h_new(llvm_charset_exec_plan_t, 1);
   memset(cep, 0, sizeof(*cep));
-  cep->cs = copy_charset(mm__, cs);
+  cep->cs = NULL;
+  /*
+   * Initializing these is important; if the parent is CHARSET_ACTION_SPLIT,
+   * these are how h_llvm_build_charset_exec_plan_impl() knows the range for
+   * the child it's constructing.
+   */
   cep->idx_start = idx_start;
   cep->idx_end = idx_end;
-  charset_restrict_to_range(cep->cs, idx_start, idx_end);
-  cost = h_llvm_build_charset_exec_plan_impl(mm__, cep->cs, parent, cep,
+  cost = h_llvm_build_charset_exec_plan_impl(mm__, cs, parent, cep,
       allow_complement, NULL);
   if (cost >= 0) cep->cost = cost;
   else {
-- 
GitLab