From 6889767c9adcb4fd3e6d6be31695d3f68dfbb0c0 Mon Sep 17 00:00:00 2001
From: "Martin R. Neuhaeusser" <post@marneu.com>
Date: Tue, 19 Apr 2016 10:04:49 +0200
Subject: [PATCH 1/2] Fix bug in OCaml API where double values have been
 wrapped incorrectly.

This patch fixes a segmentation fault that occurs due to incorrect
wrapping of double values in the OCaml API.
---
 scripts/update_api.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/update_api.py b/scripts/update_api.py
index 09a10f6cf..16ec1e81e 100755
--- a/scripts/update_api.py
+++ b/scripts/update_api.py
@@ -1179,7 +1179,7 @@ def ml_set_wrap(t, d, n):
     elif t == INT64 or t == UINT64:
         return d + ' = Val_long(' + n + ');'
     elif t == DOUBLE:
-        return 'Store_double_val(' + d + ', ' + n + ');'
+        return d + '= caml_copy_double(' + n + ');'
     elif t == STRING:
         return d + ' = caml_copy_string((const char*) ' + n + ');'
     else:

From 436113896d8699ca49af485285f07c1328958b23 Mon Sep 17 00:00:00 2001
From: "Martin R. Neuhaeusser" <post@marneu.com>
Date: Tue, 19 Apr 2016 12:51:16 +0200
Subject: [PATCH 2/2] Fix typo in OCaml bindings

---
 scripts/update_api.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/update_api.py b/scripts/update_api.py
index 16ec1e81e..a06f1fbb1 100755
--- a/scripts/update_api.py
+++ b/scripts/update_api.py
@@ -1364,11 +1364,11 @@ def mk_z3native_stubs_c(ml_dir): # C interface
                 ts = type2str(t)
                 ml_wrapper.write('  _iter = a' + str(i) + ';\n')
                 ml_wrapper.write('  for (_i = 0; _i < _a%s; _i++) {\n' % param_array_capacity_pos(param))
-                ml_wrapper.write('    assert(iter != Val_emptylist);\n')
+                ml_wrapper.write('    assert(_iter != Val_emptylist);\n')
                 ml_wrapper.write('    _a%s[_i] = %s;\n' % (i, ml_unwrap(t, ts, 'Field(_iter, 0)')))
                 ml_wrapper.write('    _iter = Field(_iter, 1);\n')
                 ml_wrapper.write('  }\n')
-                ml_wrapper.write('  assert(iter == Val_emptylist);\n\n')
+                ml_wrapper.write('  assert(_iter == Val_emptylist);\n\n')
             i = i + 1
 
         ml_wrapper.write('\n  /* invoke Z3 function */\n  ')