diff --git a/cmake/BuildMisc.cmake b/cmake/BuildMisc.cmake
index 5e797421133d4c3fbc5ad611a753559b9f4a74e4..a8a5141d364264e581c7c9eaf982d204c69f9015 100644
--- a/cmake/BuildMisc.cmake
+++ b/cmake/BuildMisc.cmake
@@ -8,6 +8,12 @@ macro(libmisc_build)
         ${PROJECT_SOURCE_DIR}/third_party/base64.c
     )
 
+    if (CC_HAS_WNO_IMPLICIT_FALLTHROUGH)
+        # Disable false-positive warnings in switch() {} block
+        set_source_files_properties(${PROJECT_SOURCE_DIR}/third_party/base64.c
+            PROPERTIES COMPILE_FLAGS -Wno-implicit-fallthrough)
+    endif()
+
     if (NOT HAVE_MEMMEM)
         list(APPEND misc_src
             ${PROJECT_SOURCE_DIR}/third_party/memmem.c
diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
index 5db96932b2f3a04417302b849390042199cdd9c2..a0b5ed56605e1c172fb2fe7dccfcba4cba47676b 100644
--- a/cmake/compiler.cmake
+++ b/cmake/compiler.cmake
@@ -99,6 +99,8 @@ check_c_compiler_flag("-Wno-undefined-inline" CC_HAS_WNO_UNDEFINED_INLINE)
 check_c_compiler_flag("-Wno-dangling-else" CC_HAS_WNO_DANGLING_ELSE)
 check_c_compiler_flag("-Wno-tautological-compare" CC_HAS_WNO_TAUTOLOGICAL_COMPARE)
 check_c_compiler_flag("-Wno-misleading-indentation" CC_HAS_WNO_MISLEADING_INDENTATION)
+check_c_compiler_flag("-Wno-format-truncation" CC_HAS_WNO_FORMAT_TRUNCATION)
+check_c_compiler_flag("-Wno-implicit-fallthrough" CC_HAS_WNO_IMPLICIT_FALLTHROUGH)
 
 #
 # Perform build type specific configuration.
@@ -232,6 +234,10 @@ macro(enable_tnt_compile_flags)
         add_compile_flags("C;CXX" "-Wno-unused-value")
     endif()
 
+    if (CC_HAS_WNO_FORMAT_TRUNCATION)
+        add_compile_flags("C;CXX" "-Wno-format-truncation")
+    endif()
+
     if (CMAKE_COMPILER_IS_GNUCXX)
         # G++ bug. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31488
         add_compile_flags("CXX"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 67423ac2e97bf608ec467105bf9a82bbfacb795b..88c21f18ed111b45b7c25b43088c1b91645f57a4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -79,6 +79,13 @@ target_link_libraries(core
     ${LIBCORO_LIBRARIES}
 )
 
+if (CC_HAS_WNO_IMPLICIT_FALLTHROUGH)
+    # Suppress noise warnings for autogenerated Ragel code
+    set_source_files_properties(uri.c PROPERTIES COMPILE_FLAGS
+        -Wno-implicit-fallthrough)
+endif()
+add_library(uri STATIC uri.c)
+
 set (server_sources
      find_path.c
      sio.cc
@@ -154,7 +161,7 @@ endif()
 
 set_source_files_compile_flags(${server_sources})
 add_library(server STATIC ${server_sources})
-target_link_libraries(server core bit)
+target_link_libraries(server core bit uri)
 
 set (common_libraries server core misc bitset csv ${MSGPUCK_LIBRARIES})
 
diff --git a/src/box/sophia_engine.cc b/src/box/sophia_engine.cc
index 68ed7e5b62fb2917a353c1484053e54cbeea058e..8efbed8b35ce26b219820c4d9b3d7a7dee2d1baa 100644
--- a/src/box/sophia_engine.cc
+++ b/src/box/sophia_engine.cc
@@ -595,6 +595,7 @@ SophiaEngine::prepare(struct txn *txn)
 	switch (rc) {
 	case 1: /* rollback */
 		txn->engine_tx = NULL;
+		break;
 	case 2: /* lock */
 		tnt_raise(ClientError, ER_TRANSACTION_CONFLICT);
 		break;
diff --git a/src/lib/csv/csv.c b/src/lib/csv/csv.c
index 46e32bfa921b59ceabdd42525306a96b96834f5d..f6d455a493bb1ac1d85e1f82483244a2a1938f29 100644
--- a/src/lib/csv/csv.c
+++ b/src/lib/csv/csv.c
@@ -103,10 +103,13 @@ csv_setopt(struct csv *csv, int opt, ...)
 		break;
 	case CSV_OPT_EMIT_FIELD:
 		csv->emit_field = va_arg(args, csv_emit_field_t);
+		break;
 	case CSV_OPT_EMIT_ROW:
 		csv->emit_row = va_arg(args, csv_emit_row_t);
+		break;
 	case CSV_OPT_EMIT_CTX:
 		csv->emit_ctx = va_arg(args, void*);
+		break;
 	}
 	va_end(args);
 }
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index cd464a3e3df8663004fd6866117209b8387f4dc3..5bc843afce00b9176435fe4aab9efdac0873678c 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -10,7 +10,8 @@ include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${CMAKE_SOURCE_DIR}/third_party)
 add_executable(rlist.test rlist.c unit.c)
 add_executable(stailq.test stailq.c unit.c)
-add_executable(uri.test uri.c unit.c ${CMAKE_SOURCE_DIR}/src/uri.c)
+add_executable(uri.test uri.c unit.c)
+target_link_libraries(uri.test uri)
 add_executable(fiob.test unit.c fiob.c ${CMAKE_SOURCE_DIR}/src/fiob.c)
 add_executable(queue.test queue.c)
 add_executable(mhash.test mhash.c)
@@ -28,7 +29,8 @@ add_executable(bitset_iterator.test bitset_iterator.c)
 target_link_libraries(bitset_iterator.test bitset)
 add_executable(bitset_index.test bitset_index.c)
 target_link_libraries(bitset_index.test bitset)
-add_executable(base64.test base64.c ${CMAKE_SOURCE_DIR}/third_party/base64.c)
+add_executable(base64.test base64.c)
+target_link_libraries(base64.test misc)
 
 add_executable(bps_tree.test bps_tree.cc)
 target_link_libraries(bps_tree.test small misc)
@@ -73,10 +75,9 @@ add_executable(coio.test coio.cc unit.c
         ${CMAKE_SOURCE_DIR}/src/evio.cc
         ${CMAKE_SOURCE_DIR}/src/coio.cc
         ${CMAKE_SOURCE_DIR}/src/coeio.c
-        ${CMAKE_SOURCE_DIR}/src/uri.c
         ${CMAKE_SOURCE_DIR}/src/fio.c
         ${CMAKE_SOURCE_DIR}/src/iobuf.cc)
-target_link_libraries(coio.test core eio bit)
+target_link_libraries(coio.test core eio bit uri)
 
 if (ENABLE_BUNDLED_MSGPUCK)
     set(MSGPUCK_DIR ${PROJECT_SOURCE_DIR}/src/lib/msgpuck/)
@@ -94,9 +95,8 @@ endif ()
 
 add_executable(scramble.test scramble.c
     ${CMAKE_SOURCE_DIR}/src/scramble.c
-    ${CMAKE_SOURCE_DIR}/third_party/sha1.c
-    ${CMAKE_SOURCE_DIR}/third_party/base64.c
     ${CMAKE_SOURCE_DIR}/src/random.c)
+    target_link_libraries(scramble.test misc)
 
 add_executable(guava.test guava.c)
 target_link_libraries(guava.test salad small)