diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
index a2206d086e9117a2676c68e15495f7c4ba3881b0..115ac22f0ba3e488bf52211d617fa42a34db2ebe 100644
--- a/cmake/compiler.cmake
+++ b/cmake/compiler.cmake
@@ -108,7 +108,8 @@ endif()
 if (CMAKE_COMPILER_IS_CLANG)
     add_compile_flags("OBJC"
         "-fobjc-nonfragile-abi"
-        "-fno-objc-legacy-dispatch")
+        "-fno-objc-legacy-dispatch"
+        "-Wno-objc-root-class")
 endif()
 
 if (CMAKE_COMPILER_IS_CLANGXX)
diff --git a/include/sio.h b/include/sio.h
index ba7ad0ab70132dc80b11b3429d38d56c7a68410b..f537054ee3db2b389d96c9827499bdcfe978c1cf 100644
--- a/include/sio.h
+++ b/include/sio.h
@@ -43,7 +43,7 @@
 enum { SERVICE_NAME_MAXLEN = 32 };
 
 @interface SocketError: SystemError
-- (id) init: (int) fd in: (const char *) format: (va_list) ap;
+- (id) init: (int) fd in: (const char *) format :(va_list) ap;
 - (id) init: (int) fd in: (const char *) format, ...;
 @end
 
diff --git a/src/box/bitset_index.m b/src/box/bitset_index.m
index b4ee44723469599d3600a4cc5ca14d81d3b920ae..4f0c5612a68639aedda00898908946a497b24c6d 100644
--- a/src/box/bitset_index.m
+++ b/src/box/bitset_index.m
@@ -235,8 +235,9 @@ bitset_index_iterator_next(struct iterator *iterator)
 	return ret;
 }
 
-- (void) initIterator: (struct iterator *) iterator:(enum iterator_type) type
-      :(const void *) key :(u32) part_count
+- (void) initIterator: (struct iterator *) iterator
+		     :(enum iterator_type) type
+		     :(const void *) key :(u32) part_count
 {
 	assert(iterator->free == bitset_index_iterator_free);
 	struct bitset_index_iterator *it = bitset_index_iterator(iterator);
diff --git a/src/box/box_lua.m b/src/box/box_lua.m
index 68e44f335cd76a2df9f8c25c1ffe5c0a857a9ae6..91299246a703fbaf443a8f4890841657d7833860 100644
--- a/src/box/box_lua.m
+++ b/src/box/box_lua.m
@@ -153,7 +153,7 @@ lbox_tuple_slice(struct lua_State *L)
 	} else if (field_no < 0 && -field_no <= tuple->field_count) {
 		start = field_no + tuple->field_count;
 	} else {
-		luaL_error(L, "tuple.slice(): start >= field count");
+		return luaL_error(L, "tuple.slice(): start >= field count");
 	}
 
 	if (argc == 2) {
@@ -163,13 +163,13 @@ lbox_tuple_slice(struct lua_State *L)
 		} else if (field_no < 0 && -field_no < tuple->field_count) {
 			end = field_no + tuple->field_count;
 		} else {
-			luaL_error(L, "tuple.slice(): end > field count");
+			return luaL_error(L, "tuple.slice(): end > field count");
 		}
 	} else {
 		end = tuple->field_count;
 	}
 	if (end <= start)
-		luaL_error(L, "tuple.slice(): start must be less than end");
+		return luaL_error(L, "tuple.slice(): start must be less than end");
 
 	const void *field = tuple->data;
 	u32 fieldno = 0;
diff --git a/src/log_io.m b/src/log_io.m
index 1eb9fd89db0dc9e240e7f8cf1a0e9476392aec9f..7bd486642c93e4c09a15070d4c99bfabcbd53ecc 100644
--- a/src/log_io.m
+++ b/src/log_io.m
@@ -507,7 +507,7 @@ log_io_sync(struct log_io *l)
 }
 
 static int
-log_io_write_header(struct log_io *l)
+	log_io_write_header(struct log_io *l)
 {
 	int ret = fprintf(l->f, "%s%s\n", l->dir->filetype, v11);
 
@@ -582,12 +582,16 @@ log_io_open(struct log_dir *dir, enum log_mode mode,
 	l->dir = dir;
 	l->is_inprogress = suffix == INPROGRESS;
 	if (mode == LOG_READ) {
-		if (log_io_verify_meta(l, &errmsg) != 0)
+		if (log_io_verify_meta(l, &errmsg) != 0) {
+			errmsg = strerror(errno);
 			goto error;
+		}
 	} else { /* LOG_WRITE */
 		setvbuf(l->f, NULL, _IONBF, 0);
-		if (log_io_write_header(l) != 0)
+		if (log_io_write_header(l) != 0) {
+			errmsg = strerror(errno);
 			goto error;
+		}
 	}
 	return l;
 error:
diff --git a/src/sio.m b/src/sio.m
index 4118db8d2e542d3c3ba27d2a0a53b0f0b5ab2c0e..7b0eefa1ce543b5aa89f245010404b44a61b76e9 100644
--- a/src/sio.m
+++ b/src/sio.m
@@ -62,7 +62,7 @@ sio_socketname(int fd)
 }
 
 @implementation SocketError
-- (id) init: (int) fd in: (const char *) format: (va_list) ap
+- (id) init: (int) fd in: (const char *) format :(va_list) ap
 {
 	int save_errno = errno;
 	char buf[TNT_ERRMSG_MAX];