From 953ea7c88069d2221547035a3dd21166703c822d Mon Sep 17 00:00:00 2001
From: Nikolaj Bjorner <nbjorner@microsoft.com>
Date: Tue, 18 Feb 2020 23:08:59 -0800
Subject: [PATCH] fix #3044

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
---
 src/smt/theory_array.cpp      | 9 ++++++---
 src/smt/theory_array_base.cpp | 4 ++--
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/smt/theory_array.cpp b/src/smt/theory_array.cpp
index d80660727..65095e5b3 100644
--- a/src/smt/theory_array.cpp
+++ b/src/smt/theory_array.cpp
@@ -334,14 +334,17 @@ namespace smt {
         enode * arg      = ctx.get_enode(n->get_arg(0));
         theory_var v_arg = arg->get_th_var(get_id());
         SASSERT(v_arg != null_theory_var);
+        
+        if (!ctx.e_internalized(n)) ctx.internalize(n, false);
+        enode* e = ctx.get_enode(n);
         if (is_select(n)) {
-            add_parent_select(v_arg, ctx.get_enode(n));
+            add_parent_select(v_arg, e);
         }
         else {
             SASSERT(is_store(n));
             if (m_params.m_array_laziness > 1)
-                instantiate_axiom1(ctx.get_enode(n));
-            add_parent_store(v_arg, ctx.get_enode(n));
+                instantiate_axiom1(e);
+            add_parent_store(v_arg, e);
         }
     }
      
diff --git a/src/smt/theory_array_base.cpp b/src/smt/theory_array_base.cpp
index 8e681c7ab..e63474479 100644
--- a/src/smt/theory_array_base.cpp
+++ b/src/smt/theory_array_base.cpp
@@ -342,8 +342,8 @@ namespace smt {
             args1.push_back(k);
             args2.push_back(k);
         }
-        expr * sel1 = mk_select(args1.size(), args1.c_ptr());
-        expr * sel2 = mk_select(args2.size(), args2.c_ptr());
+        expr_ref sel1(mk_select(args1.size(), args1.c_ptr()), m);
+        expr_ref sel2(mk_select(args2.size(), args2.c_ptr()), m);
         TRACE("ext", tout << mk_bounded_pp(sel1, m) << "\n" << mk_bounded_pp(sel2, m) << "\n";);
         literal n1_eq_n2     = mk_eq(e1, e2, true);
         literal sel1_eq_sel2 = mk_eq(sel1, sel2, true);