diff --git a/src/allocator.c b/src/allocator.c
index 6d1c6864a7a2c1f1b30aaf1986314e0b7118b338..b4dd94f3401b5aa3ab329935f4971a5dc2ee4c4d 100644
--- a/src/allocator.c
+++ b/src/allocator.c
@@ -65,6 +65,13 @@ void* h_alloc(HAllocator* mm__, size_t size) {
   return p;
 }
 
+void* h_realloc(HAllocator* mm__, void* ptr, size_t size) {
+  void *p = mm__->realloc(mm__, ptr, size);
+  if(!p)
+    h_platform_errx(1, "memory reallocation failed (%zuB requested)\n", size);
+  return p;
+}
+
 HArena *h_new_arena(HAllocator* mm__, size_t block_size) {
   if (block_size == 0)
     block_size = 4096;
diff --git a/src/allocator.h b/src/allocator.h
index 8ebde72308997aa5ac56885d1fa5d45078659170..f98ec899bb872acb105e7b16120f448d34c2d8ca 100644
--- a/src/allocator.h
+++ b/src/allocator.h
@@ -48,6 +48,7 @@ typedef struct HAllocator_ {
 } HAllocator;
 
 void* h_alloc(HAllocator* allocator, size_t size) ATTR_MALLOC(2);
+void* h_realloc(HAllocator* allocator, void* ptr, size_t size);
 
 typedef struct HArena_ HArena ; // hidden implementation