diff --git a/src/box/alter.cc b/src/box/alter.cc
index 63d75c772273a82be59c97dea6c5e7e73d4cb3cd..cc390443396646afd360210a7096f088dba1a14c 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -1505,7 +1505,7 @@ class RebuildFuncIndex: public RebuildIndex
 	static struct index_def *
 	func_index_def_new(struct index_def *index_def, struct func *func)
 	{
-		struct index_def *new_index_def = index_def_dup_xc(index_def);
+		struct index_def *new_index_def = index_def_dup(index_def);
 		index_def_set_func(new_index_def, func);
 		return new_index_def;
 	}
diff --git a/src/box/index.cc b/src/box/index.cc
index e8f41cdb9eb4d53d1d59c2d901eb0d150ee202ae..d7164f45bed946f16bf96d610ee0d115963fad8a 100644
--- a/src/box/index.cc
+++ b/src/box/index.cc
@@ -772,14 +772,11 @@ iterator_delete(struct iterator *it)
 	it->free(it);
 }
 
-int
+void
 index_create(struct index *index, struct engine *engine,
 	     const struct index_vtab *vtab, struct index_def *def)
 {
 	def = index_def_dup(def);
-	if (def == NULL)
-		return -1;
-
 	index->vtab = vtab;
 	index->engine = engine;
 	index->def = def;
@@ -790,7 +787,6 @@ index_create(struct index *index, struct engine *engine,
 	/* Unusable until set to proper value during space creation. */
 	index->dense_id = UINT32_MAX;
 	rlist_create(&index->read_gaps);
-	return 0;
 }
 
 void
@@ -808,17 +804,14 @@ index_delete(struct index *index)
 	index_def_delete(def);
 }
 
-int
+void
 index_read_view_create(struct index_read_view *rv,
 		       const struct index_read_view_vtab *vtab,
 		       struct index_def *def)
 {
 	rv->vtab = vtab;
 	rv->def = index_def_dup(def);
-	if (rv->def == NULL)
-		return -1;
 	rv->space = NULL;
-	return 0;
 }
 
 void
diff --git a/src/box/index.h b/src/box/index.h
index f31e2ba81565e0c646c626481bdcebd9101d1b32..22d3799899a0e2126b9c21918108ee04a41ebbbe 100644
--- a/src/box/index.h
+++ b/src/box/index.h
@@ -837,7 +837,7 @@ replace_check_dup(struct tuple *old_tuple, struct tuple *dup_tuple,
  * Initialize an index instance.
  * Note, this function copies the given index definition.
  */
-int
+void
 index_create(struct index *index, struct engine *engine,
 	     const struct index_vtab *vtab, struct index_def *def);
 
@@ -1042,7 +1042,7 @@ index_end_build(struct index *index)
  * Initialize an index read view instance.
  * Note, this function copies the given index definition.
  */
-int
+void
 index_read_view_create(struct index_read_view *rv,
 		       const struct index_read_view_vtab *vtab,
 		       struct index_def *def);
diff --git a/src/box/index_def.c b/src/box/index_def.c
index 6c136db5249439eb9ddede269ec1f4c2a808eba4..386c46cce27b50b96a1c7651fb2ae105124d1562 100644
--- a/src/box/index_def.c
+++ b/src/box/index_def.c
@@ -122,32 +122,16 @@ index_def_new(uint32_t space_id, uint32_t iid, const char *name,
 struct index_def *
 index_def_dup(const struct index_def *def)
 {
-	struct index_def *dup = (struct index_def *) malloc(sizeof(*dup));
-	if (dup == NULL) {
-		diag_set(OutOfMemory, sizeof(*dup), "malloc",
-			 "struct index_def");
-		return NULL;
-	}
+	struct index_def *dup = xmalloc(sizeof(*dup));
 	*dup = *def;
-	dup->name = strdup(def->name);
-	if (dup->name == NULL) {
-		free(dup);
-		diag_set(OutOfMemory, strlen(def->name) + 1, "malloc",
-			 "index_def name");
-		return NULL;
-	}
+	dup->name = xstrdup(def->name);
 	dup->key_def = key_def_dup(def->key_def);
 	dup->cmp_def = key_def_dup(def->cmp_def);
 	dup->pk_def = key_def_dup(def->pk_def);
 	rlist_create(&dup->link);
 	dup->opts = def->opts;
-	if (def->opts.stat != NULL) {
+	if (def->opts.stat != NULL)
 		dup->opts.stat = index_stat_dup(def->opts.stat);
-		if (dup->opts.stat == NULL) {
-			index_def_delete(dup);
-			return NULL;
-		}
-	}
 	return dup;
 }
 
@@ -178,11 +162,7 @@ index_stat_dup(const struct index_stat *src)
 {
 	size_t size = index_stat_sizeof(src->samples, src->sample_count,
 					src->sample_field_count);
-	struct index_stat *dup = (struct index_stat *) malloc(size);
-	if (dup == NULL) {
-		diag_set(OutOfMemory, size, "malloc", "index stat");
-		return NULL;
-	}
+	struct index_stat *dup = xmalloc(size);
 	memcpy(dup, src, size);
 	uint32_t array_size = src->sample_field_count * sizeof(uint32_t);
 	uint32_t stat1_offset = sizeof(struct index_stat);
diff --git a/src/box/index_def.h b/src/box/index_def.h
index ca0681713d9e5def23fadd4fd9ef4b4443314030..8e3eadd609ff14775f1baf05e4d0dcd0cd2964c3 100644
--- a/src/box/index_def.h
+++ b/src/box/index_def.h
@@ -294,7 +294,7 @@ index_stat_sizeof(const struct index_sample *samples, uint32_t sample_count,
  * To understand memory layout see index_stat_sizeof() function.
  *
  * @param src Stat to duplicate.
- * @retval Copy of the @src or NULL on OOM.
+ * @retval Copy of the @src.
  */
 struct index_stat *
 index_stat_dup(const struct index_stat *src);
@@ -418,23 +418,6 @@ index_def_check(struct index_def *index_def, const char *space_name);
 
 #if defined(__cplusplus)
 } /* extern "C" */
-
-static inline struct index_def *
-index_def_dup_xc(const struct index_def *def)
-{
-	struct index_def *ret = index_def_dup(def);
-	if (ret == NULL)
-		diag_raise();
-	return ret;
-}
-
-static inline void
-index_def_check_xc(struct index_def *index_def, const char *space_name)
-{
-	if (index_def_check(index_def, space_name) != 0)
-		diag_raise();
-}
-
 #endif /* defined(__cplusplus) */
 
 #endif /* TARANTOOL_BOX_INDEX_DEF_H_INCLUDED */
diff --git a/src/box/memtx_bitset.cc b/src/box/memtx_bitset.cc
index 375eafae7d631378af5addefaa408140f1f930e5..7aa40daaeaa874d6d573088eef5044016687b95a 100644
--- a/src/box/memtx_bitset.cc
+++ b/src/box/memtx_bitset.cc
@@ -529,17 +529,9 @@ memtx_bitset_index_new(struct memtx_engine *memtx, struct index_def *def)
 	assert(!def->opts.is_unique);
 
 	struct memtx_bitset_index *index =
-		(struct memtx_bitset_index *)calloc(1, sizeof(*index));
-	if (index == NULL) {
-		diag_set(OutOfMemory, sizeof(*index),
-			 "malloc", "struct memtx_bitset_index");
-		return NULL;
-	}
-	if (index_create(&index->base, (struct engine *)memtx,
-			 &memtx_bitset_index_vtab, def) != 0) {
-		free(index);
-		return NULL;
-	}
+		(struct memtx_bitset_index *)xcalloc(1, sizeof(*index));
+	index_create(&index->base, (struct engine *)memtx,
+		     &memtx_bitset_index_vtab, def);
 
 #ifndef OLD_GOOD_BITSET
 	index->spare_id = SPARE_ID_END;
diff --git a/src/box/memtx_hash.cc b/src/box/memtx_hash.cc
index aed094f15698e58076ada36a0ebc562e777d096c..bc02721a8bab15dfbf7cc9fe7ab6644cb23aa268 100644
--- a/src/box/memtx_hash.cc
+++ b/src/box/memtx_hash.cc
@@ -647,10 +647,7 @@ memtx_hash_index_create_read_view(struct index *base)
 	struct memtx_hash_index *index = (struct memtx_hash_index *)base;
 	struct hash_read_view *rv =
 		(struct hash_read_view *)xmalloc(sizeof(*rv));
-	if (index_read_view_create(&rv->base, &vtab, base->def) != 0) {
-		free(rv);
-		return NULL;
-	}
+	index_read_view_create(&rv->base, &vtab, base->def);
 	struct space *space = space_by_id(base->def->space_id);
 	assert(space != NULL);
 	memtx_tx_snapshot_cleaner_create(&rv->cleaner, space);
@@ -695,17 +692,9 @@ struct index *
 memtx_hash_index_new(struct memtx_engine *memtx, struct index_def *def)
 {
 	struct memtx_hash_index *index =
-		(struct memtx_hash_index *)calloc(1, sizeof(*index));
-	if (index == NULL) {
-		diag_set(OutOfMemory, sizeof(*index),
-			 "malloc", "struct memtx_hash_index");
-		return NULL;
-	}
-	if (index_create(&index->base, (struct engine *)memtx,
-			 &memtx_hash_index_vtab, def) != 0) {
-		free(index);
-		return NULL;
-	}
+		(struct memtx_hash_index *)xcalloc(1, sizeof(*index));
+	index_create(&index->base, (struct engine *)memtx,
+		     &memtx_hash_index_vtab, def);
 
 	light_index_create(&index->hash_table, index->base.def->key_def,
 			   MEMTX_EXTENT_SIZE, memtx_index_extent_alloc,
diff --git a/src/box/memtx_rtree.cc b/src/box/memtx_rtree.cc
index a21950bc6b3f36b7ee1d8c2db6c57aeb3c3f3504..187410ba9f5b9142386b8c684998100df14adab2 100644
--- a/src/box/memtx_rtree.cc
+++ b/src/box/memtx_rtree.cc
@@ -439,17 +439,9 @@ memtx_rtree_index_new(struct memtx_engine *memtx, struct index_def *def)
 	}
 
 	struct memtx_rtree_index *index =
-		(struct memtx_rtree_index *)calloc(1, sizeof(*index));
-	if (index == NULL) {
-		diag_set(OutOfMemory, sizeof(*index),
-			 "malloc", "struct memtx_rtree_index");
-		return NULL;
-	}
-	if (index_create(&index->base, (struct engine *)memtx,
-			 &memtx_rtree_index_vtab, def) != 0) {
-		free(index);
-		return NULL;
-	}
+		(struct memtx_rtree_index *)xcalloc(1, sizeof(*index));
+	index_create(&index->base, (struct engine *)memtx,
+		     &memtx_rtree_index_vtab, def);
 
 	index->dimension = def->opts.dimension;
 	rtree_init(&index->tree, index->dimension, distance_type,
diff --git a/src/box/memtx_tree.cc b/src/box/memtx_tree.cc
index 5c7a49010ed24f27fdf73179976658cfac6f1967..8cbb2c4b3761d1dae7920d8837e72fc021a01c42 100644
--- a/src/box/memtx_tree.cc
+++ b/src/box/memtx_tree.cc
@@ -2069,10 +2069,7 @@ memtx_tree_index_create_read_view(struct index *base)
 		(struct memtx_tree_index<USE_HINT> *)base;
 	struct tree_read_view<USE_HINT> *rv =
 		(struct tree_read_view<USE_HINT> *)xmalloc(sizeof(*rv));
-	if (index_read_view_create(&rv->base, &vtab, base->def) != 0) {
-		free(rv);
-		return NULL;
-	}
+	index_read_view_create(&rv->base, &vtab, base->def);
 	struct space *space = space_by_id(base->def->space_id);
 	assert(space != NULL);
 	memtx_tx_snapshot_cleaner_create(&rv->cleaner, space);
@@ -2194,17 +2191,8 @@ memtx_tree_index_new_tpl(struct memtx_engine *memtx, struct index_def *def,
 {
 	struct memtx_tree_index<USE_HINT> *index =
 		(struct memtx_tree_index<USE_HINT> *)
-		calloc(1, sizeof(*index));
-	if (index == NULL) {
-		diag_set(OutOfMemory, sizeof(*index),
-			 "malloc", "struct memtx_tree_index");
-		return NULL;
-	}
-	if (index_create(&index->base, (struct engine *)memtx,
-			 vtab, def) != 0) {
-		free(index);
-		return NULL;
-	}
+		xcalloc(1, sizeof(*index));
+	index_create(&index->base, (struct engine *)memtx, vtab, def);
 
 	/* See comment to memtx_tree_index_update_def(). */
 	struct key_def *cmp_def;
diff --git a/src/box/sequence.c b/src/box/sequence.c
index 7f1e5c50a3fce986291271a29d5a14eeff82ec2f..b7c536a26761e1b08ffeb0fdbae320646c9a9ec0 100644
--- a/src/box/sequence.c
+++ b/src/box/sequence.c
@@ -410,17 +410,13 @@ sequence_data_read_view_free(struct index_read_view *base)
 struct index_read_view *
 sequence_data_read_view_create(struct index *index)
 {
-	(void)index;
 	static const struct index_read_view_vtab vtab = {
 		.free = sequence_data_read_view_free,
 		.get_raw = sequence_data_read_view_get_raw,
 		.create_iterator = sequence_data_iterator_create,
 	};
 	struct sequence_data_read_view *rv = xmalloc(sizeof(*rv));
-	if (index_read_view_create(&rv->base, &vtab, index->def) != 0) {
-		free(rv);
-		return NULL;
-	}
+	index_read_view_create(&rv->base, &vtab, index->def);
 	light_sequence_view_create(&rv->view, &sequence_data_index);
 	return (struct index_read_view *)rv;
 }
diff --git a/src/box/session_settings.c b/src/box/session_settings.c
index 053628d3de002485390410ce00ba148924695861..66fa9fc8307e103c6cd5abbdfeb9c3cafeb3da57 100644
--- a/src/box/session_settings.c
+++ b/src/box/session_settings.c
@@ -409,17 +409,9 @@ session_settings_space_create_index(struct space *space, struct index_def *def)
 		return NULL;
 	}
 
-	struct session_settings_index *index =
-		(struct session_settings_index *)calloc(1, sizeof(*index));
-	if (index == NULL) {
-		diag_set(OutOfMemory, sizeof(*index), "calloc", "index");
-		return NULL;
-	}
-	if (index_create(&index->base, space->engine,
-			 &session_settings_index_vtab, def) != 0) {
-		free(index);
-		return NULL;
-	}
+	struct session_settings_index *index = xcalloc(1, sizeof(*index));
+	index_create(&index->base, space->engine, &session_settings_index_vtab,
+		     def);
 
 	index->format = space->format;
 	return &index->base;
diff --git a/src/box/sysview.c b/src/box/sysview.c
index 9167e37a9c8abfac32959ce099838faf9e654bc8..6b3dfd790ddccc36be26d4badafce661e0dd4a5a 100644
--- a/src/box/sysview.c
+++ b/src/box/sysview.c
@@ -475,18 +475,9 @@ sysview_space_create_index(struct space *space, struct index_def *def)
 		return NULL;
 	}
 
-	struct sysview_index *index =
-		(struct sysview_index *)calloc(1, sizeof(*index));
-	if (index == NULL) {
-		diag_set(OutOfMemory, sizeof(*index),
-			 "malloc", "struct sysview_index");
-		return NULL;
-	}
-	if (index_create(&index->base, (struct engine *)sysview,
-			 &sysview_index_vtab, def) != 0) {
-		free(index);
-		return NULL;
-	}
+	struct sysview_index *index = xcalloc(1, sizeof(*index));
+	index_create(&index->base, (struct engine *)sysview,
+		     &sysview_index_vtab, def);
 
 	index->source_space_id = source_space_id;
 	index->source_index_id = source_index_id;
diff --git a/src/box/vinyl.c b/src/box/vinyl.c
index d2f1f61d9ae2fb19f004f5a6cb8539c6b33490d4..dc2c053be9371dac37abba8287605f566da6f79d 100644
--- a/src/box/vinyl.c
+++ b/src/box/vinyl.c
@@ -713,11 +713,7 @@ vinyl_space_create_index(struct space *space, struct index_def *index_def)
 	if (lsm == NULL)
 		return NULL;
 
-	if (index_create(&lsm->base, &env->base,
-			 &vinyl_index_vtab, index_def) != 0) {
-		vy_lsm_delete(lsm);
-		return NULL;
-	}
+	index_create(&lsm->base, &env->base, &vinyl_index_vtab, index_def);
 	return &lsm->base;
 }