Porting buffer view parse/format to C.
diff --git a/build_tools/cmake/iree_copts.cmake b/build_tools/cmake/iree_copts.cmake
index a107ee8..b48fe40 100644
--- a/build_tools/cmake/iree_copts.cmake
+++ b/build_tools/cmake/iree_copts.cmake
@@ -322,6 +322,7 @@
   CLANG_OR_GCC
     # Required by all modern software, effectively:
     "-ldl"
+    "-lm"
     ${_IREE_PTHREADS_LINKOPTS}
     ${_IREE_LOGGING_LINKOPTS}
 )
diff --git a/iree/base/string_view.h b/iree/base/string_view.h
index 23a4fcc..f72d6ce 100644
--- a/iree/base/string_view.h
+++ b/iree/base/string_view.h
@@ -123,7 +123,7 @@
 iree_string_view_trim(iree_string_view_t value);
 
 // Returns a substring of the string view at offset |pos| and length |n|.
-// Use |n| == INTPTR_MAX to take the remaineder of the string after |pos|.
+// Use |n| == INTPTR_MAX to take the remainder of the string after |pos|.
 // Returns empty string on failure.
 IREE_API_EXPORT iree_string_view_t iree_string_view_substr(
     iree_string_view_t value, iree_host_size_t pos, iree_host_size_t n);
diff --git a/iree/hal/BUILD b/iree/hal/BUILD
index efe53aa..bfdc925 100644
--- a/iree/hal/BUILD
+++ b/iree/hal/BUILD
@@ -37,7 +37,6 @@
         "buffer_heap.c",
         "buffer_heap_impl.h",
         "buffer_view.c",
-        "buffer_view.cc",
         "buffer_view.h",
         "command_buffer.c",
         "command_buffer.h",
diff --git a/iree/hal/CMakeLists.txt b/iree/hal/CMakeLists.txt
index 4ca5f10..ba0c44a 100644
--- a/iree/hal/CMakeLists.txt
+++ b/iree/hal/CMakeLists.txt
@@ -24,7 +24,6 @@
     "buffer_heap.c"
     "buffer_heap_impl.h"
     "buffer_view.c"
-    "buffer_view.cc"
     "buffer_view.h"
     "command_buffer.c"
     "command_buffer.h"
diff --git a/iree/hal/buffer_view.c b/iree/hal/buffer_view.c
index 5a02fb8..d69ea68 100644
--- a/iree/hal/buffer_view.c
+++ b/iree/hal/buffer_view.c
@@ -16,9 +16,11 @@
 
 #include <inttypes.h>
 
+#include "iree/base/api.h"
 #include "iree/base/tracing.h"
 #include "iree/hal/allocator.h"
 #include "iree/hal/detail.h"
+#include "iree/hal/string_util.h"
 
 struct iree_hal_buffer_view_s {
   iree_atomic_ref_count_t ref_count;
@@ -358,3 +360,213 @@
   *out_length = subspan_length;
   return iree_ok_status();
 }
+
+static iree_status_t iree_hal_buffer_view_parse_impl(
+    iree_string_view_t value, iree_hal_allocator_t* buffer_allocator,
+    iree_hal_buffer_view_t** out_buffer_view) {
+  // Strip whitespace that may come along (linefeeds/etc).
+  value = iree_string_view_trim(value);
+  value = iree_string_view_strip_prefix(value, IREE_SV("\""));
+  value = iree_string_view_strip_suffix(value, IREE_SV("\""));
+  if (iree_string_view_is_empty(value)) {
+    // Empty lines are invalid; need at least the shape/type information.
+    *out_buffer_view = NULL;
+    return iree_make_status(IREE_STATUS_INVALID_ARGUMENT, "empty string input");
+  }
+
+  // The part of the string corresponding to the shape, e.g. 1x2x3.
+  iree_string_view_t shape_str = iree_string_view_empty();
+  // The part of the string corresponding to the type, e.g. f32
+  iree_string_view_t type_str = iree_string_view_empty();
+  // The part of the string corresponding to the buffer data, e.g. 1 2 3 4 5 6
+  iree_string_view_t data_str = iree_string_view_empty();
+
+  iree_string_view_t shape_and_type_str = value;
+  iree_string_view_split(value, '=', &shape_and_type_str, &data_str);
+  iree_host_size_t last_x_index = iree_string_view_find_last_of(
+      shape_and_type_str, IREE_SV("x"), IREE_STRING_VIEW_NPOS);
+  if (last_x_index == IREE_STRING_VIEW_NPOS) {
+    // Scalar.
+    type_str = shape_and_type_str;
+  } else {
+    // Has a shape.
+    shape_str = iree_string_view_substr(shape_and_type_str, 0, last_x_index);
+    type_str = iree_string_view_substr(shape_and_type_str, last_x_index + 1,
+                                       IREE_STRING_VIEW_NPOS);
+  }
+
+  // f32, i32, etc
+  iree_hal_element_type_t element_type = IREE_HAL_ELEMENT_TYPE_NONE;
+  IREE_RETURN_IF_ERROR(iree_hal_parse_element_type(type_str, &element_type));
+
+  // AxBxC...
+  iree_host_size_t shape_rank = 0;
+  iree_status_t shape_result =
+      iree_hal_parse_shape(shape_str, 0, NULL, &shape_rank);
+  if (!iree_status_is_ok(shape_result) &&
+      !iree_status_is_out_of_range(shape_result)) {
+    return shape_result;
+  } else if (shape_rank > 128) {
+    return iree_make_status(
+        IREE_STATUS_RESOURCE_EXHAUSTED,
+        "a shape rank of %zu is just a little bit excessive, eh?", shape_rank);
+  }
+  shape_result = iree_status_ignore(shape_result);
+  iree_hal_dim_t* shape =
+      (iree_hal_dim_t*)iree_alloca(shape_rank * sizeof(iree_hal_dim_t));
+  IREE_RETURN_IF_ERROR(
+      iree_hal_parse_shape(shape_str, shape_rank, shape, &shape_rank));
+
+  // Allocate the buffer we will parse into from the provided allocator.
+  iree_device_size_t buffer_length = 0;
+  IREE_RETURN_IF_ERROR(iree_hal_buffer_compute_view_size(
+      shape, shape_rank, element_type, &buffer_length));
+  iree_hal_buffer_t* buffer = NULL;
+  IREE_RETURN_IF_ERROR(iree_hal_allocator_allocate_buffer(
+      buffer_allocator,
+      IREE_HAL_MEMORY_TYPE_HOST_LOCAL | IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE,
+      IREE_HAL_BUFFER_USAGE_TRANSFER | IREE_HAL_BUFFER_USAGE_MAPPING |
+          IREE_HAL_BUFFER_USAGE_DISPATCH,
+      buffer_length, &buffer));
+
+  // Parse the elements directly into the buffer.
+  iree_hal_buffer_mapping_t buffer_mapping;
+  iree_status_t status =
+      iree_hal_buffer_map_range(buffer, IREE_HAL_MEMORY_ACCESS_DISCARD_WRITE, 0,
+                                buffer_length, &buffer_mapping);
+  if (!iree_status_is_ok(status)) {
+    iree_hal_buffer_release(buffer);
+    return status;
+  }
+  status = iree_hal_parse_buffer_elements(data_str, element_type,
+                                          buffer_mapping.contents);
+  iree_hal_buffer_unmap_range(&buffer_mapping);
+  if (!iree_status_is_ok(status)) {
+    iree_hal_buffer_release(buffer);
+    return status;
+  }
+
+  // Wrap and pass ownership of the buffer to the buffer view.
+  status = iree_hal_buffer_view_create(buffer, element_type, shape, shape_rank,
+                                       out_buffer_view);
+  iree_hal_buffer_release(buffer);
+  return status;
+}
+
+IREE_API_EXPORT iree_status_t iree_hal_buffer_view_parse(
+    iree_string_view_t value, iree_hal_allocator_t* buffer_allocator,
+    iree_hal_buffer_view_t** out_buffer_view) {
+  IREE_ASSERT_ARGUMENT(buffer_allocator);
+  IREE_ASSERT_ARGUMENT(out_buffer_view);
+  *out_buffer_view = NULL;
+  IREE_TRACE_ZONE_BEGIN(z0);
+  iree_status_t status =
+      iree_hal_buffer_view_parse_impl(value, buffer_allocator, out_buffer_view);
+  IREE_TRACE_ZONE_END(z0);
+  return status;
+}
+
+#define APPEND_CHAR(c)                           \
+  {                                              \
+    if (buffer) {                                \
+      if (buffer_length < buffer_capacity - 1) { \
+        buffer[buffer_length] = c;               \
+        buffer[buffer_length + 1] = '\0';        \
+      } else {                                   \
+        buffer = NULL;                           \
+      }                                          \
+    }                                            \
+    ++buffer_length;                             \
+  }
+
+static iree_status_t iree_hal_buffer_view_format_impl(
+    const iree_hal_buffer_view_t* buffer_view,
+    iree_host_size_t max_element_count, iree_host_size_t buffer_capacity,
+    char* buffer, iree_host_size_t* out_buffer_length) {
+  if (out_buffer_length) {
+    *out_buffer_length = 0;
+  }
+  if (buffer && buffer_capacity) {
+    buffer[0] = 0;
+  }
+
+  iree_host_size_t buffer_length = 0;
+  if (iree_hal_buffer_view_shape_rank(buffer_view) > 0) {
+    // Shape: 1x2x3
+    iree_host_size_t shape_length = 0;
+    iree_status_t status = iree_hal_format_shape(
+        iree_hal_buffer_view_shape_dims(buffer_view),
+        iree_hal_buffer_view_shape_rank(buffer_view),
+        buffer ? buffer_capacity - buffer_length : 0,
+        buffer ? buffer + buffer_length : NULL, &shape_length);
+    buffer_length += shape_length;
+    if (iree_status_is_out_of_range(status)) {
+      status = iree_status_ignore(status);
+      buffer = NULL;
+    } else if (!iree_status_is_ok(status)) {
+      return status;
+    }
+
+    // Separator: <shape>x<format>
+    APPEND_CHAR('x');
+  }
+
+  // Element type: f32
+  iree_host_size_t element_type_length = 0;
+  iree_status_t status = iree_hal_format_element_type(
+      iree_hal_buffer_view_element_type(buffer_view),
+      buffer ? buffer_capacity - buffer_length : 0,
+      buffer ? buffer + buffer_length : NULL, &element_type_length);
+  buffer_length += element_type_length;
+  if (iree_status_is_out_of_range(status)) {
+    status = iree_status_ignore(status);
+    buffer = NULL;
+  } else if (!iree_status_is_ok(status)) {
+    return status;
+  }
+
+  // Separator: <meta>=<value>
+  APPEND_CHAR('=');
+
+  // Buffer contents: 0 1 2 3 ...
+  iree_hal_buffer_mapping_t buffer_mapping;
+  IREE_RETURN_IF_ERROR(iree_hal_buffer_map_range(
+      iree_hal_buffer_view_buffer(buffer_view), IREE_HAL_MEMORY_ACCESS_READ, 0,
+      IREE_WHOLE_BUFFER, &buffer_mapping));
+  iree_host_size_t elements_length = 0;
+  status = iree_hal_format_buffer_elements(
+      iree_make_const_byte_span(buffer_mapping.contents.data,
+                                buffer_mapping.contents.data_length),
+      iree_hal_buffer_view_shape_dims(buffer_view),
+      iree_hal_buffer_view_shape_rank(buffer_view),
+      iree_hal_buffer_view_element_type(buffer_view), max_element_count,
+      buffer ? buffer_capacity - buffer_length : 0,
+      buffer ? buffer + buffer_length : NULL, &elements_length);
+  buffer_length += elements_length;
+  iree_hal_buffer_unmap_range(&buffer_mapping);
+  if (iree_status_is_out_of_range(status)) {
+    status = iree_status_ignore(status);
+    buffer = NULL;
+  } else if (!iree_status_is_ok(status)) {
+    return status;
+  }
+
+  if (out_buffer_length) {
+    *out_buffer_length = buffer_length;
+  }
+  return buffer ? iree_ok_status()
+                : iree_status_from_code(IREE_STATUS_OUT_OF_RANGE);
+}
+
+IREE_API_EXPORT iree_status_t iree_hal_buffer_view_format(
+    const iree_hal_buffer_view_t* buffer_view,
+    iree_host_size_t max_element_count, iree_host_size_t buffer_capacity,
+    char* buffer, iree_host_size_t* out_buffer_length) {
+  IREE_ASSERT_ARGUMENT(buffer_view);
+  IREE_TRACE_ZONE_BEGIN(z0);
+  iree_status_t status = iree_hal_buffer_view_format_impl(
+      buffer_view, max_element_count, buffer_capacity, buffer,
+      out_buffer_length);
+  IREE_TRACE_ZONE_END(z0);
+  return status;
+}
diff --git a/iree/hal/buffer_view.cc b/iree/hal/buffer_view.cc
deleted file mode 100644
index 52b8485..0000000
--- a/iree/hal/buffer_view.cc
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/hal/buffer_view.h"
-
-#include <cctype>
-#include <cinttypes>
-#include <cstdio>
-#include <vector>
-
-#include "absl/strings/string_view.h"
-#include "iree/base/api.h"
-#include "iree/base/tracing.h"
-#include "iree/hal/allocator.h"
-#include "iree/hal/string_util.h"
-
-IREE_API_EXPORT iree_status_t iree_hal_buffer_view_parse(
-    iree_string_view_t value, iree_hal_allocator_t* buffer_allocator,
-    iree_allocator_t allocator, iree_hal_buffer_view_t** out_buffer_view) {
-  IREE_TRACE_SCOPE0("iree_hal_buffer_view_parse");
-  IREE_ASSERT_ARGUMENT(buffer_allocator);
-
-  // Strip whitespace that may come along (linefeeds/etc).
-  value = iree_string_view_trim(value);
-  value = iree_string_view_strip_prefix(value, IREE_SV("\""));
-  value = iree_string_view_strip_suffix(value, IREE_SV("\""));
-  if (iree_string_view_is_empty(value)) {
-    // Empty lines are invalid; need at least the shape/type information.
-    *out_buffer_view = nullptr;
-    return iree_make_status(IREE_STATUS_INVALID_ARGUMENT, "empty string input");
-  }
-
-  // The part of the string corresponding to the shape, e.g. 1x2x3.
-  absl::string_view shape_str;
-  // The part of the string corresponding to the type, e.g. f32
-  absl::string_view type_str;
-  // The part of the string corresponding to the buffer data, e.g. 1 2 3 4 5 6
-  absl::string_view data_str;
-
-  // TODO(#3848): replace with iree_string_view_split, which does all of this.
-  auto string_view = absl::string_view(value.data, value.size);
-  absl::string_view shape_and_type_str;
-  auto equal_index = string_view.find('=');
-  if (equal_index == std::string::npos) {
-    // Treat a lack of = as defaulting the data to zeros.
-    shape_and_type_str = string_view;
-  } else {
-    shape_and_type_str = string_view.substr(0, equal_index);
-    data_str = string_view.substr(equal_index + 1);
-  }
-  auto last_x_index = shape_and_type_str.rfind('x');
-  if (last_x_index == std::string::npos) {
-    // Scalar.
-    type_str = shape_and_type_str;
-  } else {
-    // Has a shape.
-    shape_str = shape_and_type_str.substr(0, last_x_index);
-    type_str = shape_and_type_str.substr(last_x_index + 1);
-  }
-
-  // AxBxC...
-  std::vector<iree_hal_dim_t> shape(6);
-  iree_host_size_t shape_rank = 0;
-  iree_status_t shape_result =
-      iree_hal_parse_shape({shape_str.data(), shape_str.length()}, shape.size(),
-                           shape.data(), &shape_rank);
-  if (iree_status_is_ok(shape_result)) {
-    shape.resize(shape_rank);
-  } else if (iree_status_is_out_of_range(shape_result)) {
-    shape.resize(shape_rank);
-    IREE_RETURN_IF_ERROR(
-        iree_hal_parse_shape({shape_str.data(), shape_str.length()},
-                             shape.size(), shape.data(), &shape_rank));
-  } else {
-    return shape_result;
-  }
-
-  // f32, i32, etc
-  iree_hal_element_type_t element_type = IREE_HAL_ELEMENT_TYPE_NONE;
-  IREE_RETURN_IF_ERROR(iree_hal_parse_element_type(
-      {type_str.data(), type_str.length()}, &element_type));
-
-  // Allocate the buffer we will parse into from the provided allocator.
-  iree_device_size_t buffer_length = 0;
-  IREE_RETURN_IF_ERROR(iree_hal_buffer_compute_view_size(
-      shape.data(), shape.size(), element_type, &buffer_length));
-  iree_hal_buffer_t* buffer = nullptr;
-  IREE_RETURN_IF_ERROR(iree_hal_allocator_allocate_buffer(
-      buffer_allocator,
-      IREE_HAL_MEMORY_TYPE_HOST_LOCAL | IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE,
-      IREE_HAL_BUFFER_USAGE_TRANSFER | IREE_HAL_BUFFER_USAGE_MAPPING |
-          IREE_HAL_BUFFER_USAGE_DISPATCH,
-      buffer_length, &buffer));
-
-  iree_status_t status;
-
-  // Parse the elements directly into the buffer.
-  iree_hal_buffer_mapping_t buffer_mapping;
-  status =
-      iree_hal_buffer_map_range(buffer, IREE_HAL_MEMORY_ACCESS_DISCARD_WRITE, 0,
-                                buffer_length, &buffer_mapping);
-  if (!iree_status_is_ok(status)) {
-    iree_hal_buffer_release(buffer);
-    return status;
-  }
-  status =
-      iree_hal_parse_buffer_elements({data_str.data(), data_str.length()},
-                                     element_type, buffer_mapping.contents);
-  iree_hal_buffer_unmap_range(&buffer_mapping);
-  if (!iree_status_is_ok(status)) {
-    iree_hal_buffer_release(buffer);
-    return status;
-  }
-
-  // Wrap and pass ownership of the buffer to the buffer view.
-  status = iree_hal_buffer_view_create(buffer, element_type, shape.data(),
-                                       shape.size(), out_buffer_view);
-  iree_hal_buffer_release(buffer);
-  return status;
-}
-
-IREE_API_EXPORT iree_status_t iree_hal_buffer_view_format(
-    const iree_hal_buffer_view_t* buffer_view,
-    iree_host_size_t max_element_count, iree_host_size_t buffer_capacity,
-    char* buffer, iree_host_size_t* out_buffer_length) {
-  IREE_TRACE_SCOPE0("iree_hal_buffer_view_format");
-  IREE_ASSERT_ARGUMENT(buffer_view);
-  if (out_buffer_length) {
-    *out_buffer_length = 0;
-  }
-  if (buffer && buffer_capacity) {
-    buffer[0] = 0;
-  }
-
-  iree_status_t status;
-  iree_host_size_t buffer_length = 0;
-  auto append_char = [&](char c) {
-    if (buffer) {
-      if (buffer_length < buffer_capacity - 1) {
-        buffer[buffer_length] = c;
-        buffer[buffer_length + 1] = '\0';
-      } else {
-        buffer = nullptr;
-      }
-    }
-    ++buffer_length;
-  };
-
-  if (iree_hal_buffer_view_shape_rank(buffer_view) > 0) {
-    // Shape: 1x2x3
-    iree_host_size_t shape_length = 0;
-    status = iree_hal_format_shape(iree_hal_buffer_view_shape_dims(buffer_view),
-                                   iree_hal_buffer_view_shape_rank(buffer_view),
-                                   buffer ? buffer_capacity - buffer_length : 0,
-                                   buffer ? buffer + buffer_length : nullptr,
-                                   &shape_length);
-    buffer_length += shape_length;
-    if (iree_status_is_out_of_range(status)) {
-      status = iree_status_ignore(status);
-      buffer = nullptr;
-    } else if (!iree_status_is_ok(status)) {
-      return status;
-    }
-
-    // Separator: <shape>x<format>
-    append_char('x');
-  }
-
-  // Element type: f32
-  iree_host_size_t element_type_length = 0;
-  status = iree_hal_format_element_type(
-      iree_hal_buffer_view_element_type(buffer_view),
-      buffer ? buffer_capacity - buffer_length : 0,
-      buffer ? buffer + buffer_length : nullptr, &element_type_length);
-  buffer_length += element_type_length;
-  if (iree_status_is_out_of_range(status)) {
-    status = iree_status_ignore(status);
-    buffer = nullptr;
-  } else if (!iree_status_is_ok(status)) {
-    return status;
-  }
-
-  // Separator: <meta>=<value>
-  append_char('=');
-
-  // Buffer contents: 0 1 2 3 ...
-  iree_hal_buffer_mapping_t buffer_mapping;
-  IREE_RETURN_IF_ERROR(iree_hal_buffer_map_range(
-      iree_hal_buffer_view_buffer(buffer_view), IREE_HAL_MEMORY_ACCESS_READ, 0,
-      IREE_WHOLE_BUFFER, &buffer_mapping));
-  iree_host_size_t elements_length = 0;
-  status = iree_hal_format_buffer_elements(
-      iree_const_byte_span_t{buffer_mapping.contents.data,
-                             buffer_mapping.contents.data_length},
-      iree_hal_buffer_view_shape_dims(buffer_view),
-      iree_hal_buffer_view_shape_rank(buffer_view),
-      iree_hal_buffer_view_element_type(buffer_view), max_element_count,
-      buffer ? buffer_capacity - buffer_length : 0,
-      buffer ? buffer + buffer_length : nullptr, &elements_length);
-  buffer_length += elements_length;
-  iree_hal_buffer_unmap_range(&buffer_mapping);
-  if (iree_status_is_out_of_range(status)) {
-    status = iree_status_ignore(status);
-    buffer = nullptr;
-  } else if (!iree_status_is_ok(status)) {
-    return status;
-  }
-
-  if (out_buffer_length) {
-    *out_buffer_length = buffer_length;
-  }
-  return buffer ? iree_ok_status()
-                : iree_status_from_code(IREE_STATUS_OUT_OF_RANGE);
-}
diff --git a/iree/hal/buffer_view.h b/iree/hal/buffer_view.h
index 3d35407..2f920ae 100644
--- a/iree/hal/buffer_view.h
+++ b/iree/hal/buffer_view.h
@@ -221,7 +221,7 @@
 // buffer.
 IREE_API_EXPORT iree_status_t iree_hal_buffer_view_parse(
     iree_string_view_t value, iree_hal_allocator_t* buffer_allocator,
-    iree_allocator_t allocator, iree_hal_buffer_view_t** out_buffer_view);
+    iree_hal_buffer_view_t** out_buffer_view);
 
 // Converts buffer view elements into a fully-specified string-form format like
 // `2x4xi16=[[1 2][3 4]]`.
diff --git a/iree/hal/local/executable_library_benchmark.c b/iree/hal/local/executable_library_benchmark.c
index 8c9a148..02dc927 100644
--- a/iree/hal/local/executable_library_benchmark.c
+++ b/iree/hal/local/executable_library_benchmark.c
@@ -253,9 +253,8 @@
   void* binding_ptrs[IREE_HAL_LOCAL_MAX_TOTAL_BINDING_COUNT];
   size_t binding_lengths[IREE_HAL_LOCAL_MAX_TOTAL_BINDING_COUNT];
   for (iree_host_size_t i = 0; i < dispatch_params.binding_count; ++i) {
-    IREE_RETURN_IF_ERROR(
-        iree_hal_buffer_view_parse(dispatch_params.bindings[i], heap_allocator,
-                                   host_allocator, &buffer_views[i]));
+    IREE_RETURN_IF_ERROR(iree_hal_buffer_view_parse(
+        dispatch_params.bindings[i], heap_allocator, &buffer_views[i]));
     iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(buffer_views[i]);
     iree_device_size_t buffer_length =
         iree_hal_buffer_view_byte_length(buffer_views[i]);
diff --git a/iree/hal/string_util_test.cc b/iree/hal/string_util_test.cc
index e60585f..db3f7f2 100644
--- a/iree/hal/string_util_test.cc
+++ b/iree/hal/string_util_test.cc
@@ -483,7 +483,7 @@
     BufferView buffer_view;
     iree_status_t status = iree_hal_buffer_view_parse(
         iree_string_view_t{value.data(), value.size()}, allocator,
-        iree_allocator_system(), &buffer_view);
+        &buffer_view);
     IREE_RETURN_IF_ERROR(std::move(status));
     return std::move(buffer_view);
   }
diff --git a/iree/samples/custom_modules/native_module.cc b/iree/samples/custom_modules/native_module.cc
index 66ddb62..7bb992b 100644
--- a/iree/samples/custom_modules/native_module.cc
+++ b/iree/samples/custom_modules/native_module.cc
@@ -178,7 +178,7 @@
     vm::ref<iree_hal_buffer_view_t> buffer_view;
     IREE_RETURN_IF_ERROR(
         iree_hal_buffer_view_parse(message->value, host_local_allocator_.get(),
-                                   allocator_, &buffer_view),
+                                   &buffer_view),
         "parsing value '%.*s'", (int)message->value.size, message->value.data);
     return std::move(buffer_view);
   }
diff --git a/iree/tools/utils/vm_util.cc b/iree/tools/utils/vm_util.cc
index 5307af0..33a5d5e 100644
--- a/iree/tools/utils/vm_util.cc
+++ b/iree/tools/utils/vm_util.cc
@@ -192,7 +192,7 @@
         IREE_RETURN_IF_ERROR(
             iree_hal_buffer_view_parse(
                 iree_string_view_t{input_string.data(), input_string.size()},
-                allocator, iree_allocator_system(), &buffer_view),
+                allocator, &buffer_view),
             "parsing value '%.*s'", (int)input_string.size(),
             input_string.data());
         auto buffer_view_ref = iree_hal_buffer_view_move_ref(buffer_view);