diff --git a/CMakeLists.txt b/CMakeLists.txt
index 574c2ae695094f91aad9dbcbfeb46fc800a19938..f356b9eca5705d7202d580c370a4e29a02cbaaf6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -299,8 +299,18 @@ add_compile_options(-Werror)
 add_compile_options(-Wunused-parameter)
 add_compile_options(-Wshadow)
 
-# This requries GCC 5.1+
-add_compile_options(-Wsuggest-override)
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+    # This requries GCC 5.1+
+    if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
+        add_compile_options(-Wsuggest-override)
+    endif()
+elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+  add_compile_options(-Wno-overloaded-virtual)
+  add_compile_options(-Wno-self-assign-overloaded)
+  add_compile_options(-Wno-self-move)
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -latomic")
+endif()
+
 
 if(ENABLE_ASAN)
     add_definitions(-DBUILT_WITH_SANITIZER)
diff --git a/src/console/CliManager.cpp b/src/console/CliManager.cpp
index 88f2cc6a6c789ecd65d1d83b73c1eb169bdb3009..efc68bc93b1c6e90a345064b65bc4563621e635c 100644
--- a/src/console/CliManager.cpp
+++ b/src/console/CliManager.cpp
@@ -24,7 +24,6 @@ namespace graph {
 const int32_t kMaxAuthInfoRetries = 3;
 const int32_t kMaxUsernameLen = 16;
 const int32_t kMaxPasswordLen = 24;
-const int32_t kMaxCommandLineLen = 1024;
 
 CliManager::CliManager() {
     curSpaceName_ = std::string("(none)");
diff --git a/src/executor/GoExecutor.cpp b/src/executor/GoExecutor.cpp
index aee18590fdf65951f696061184de8fac1a041383..5bf0e009829e5d6ea9b2d140272e108d9f3e30c6 100644
--- a/src/executor/GoExecutor.cpp
+++ b/src/executor/GoExecutor.cpp
@@ -474,7 +474,7 @@ StatusOr<std::vector<storage::cpp2::PropDef>> GoExecutor::getStepOutProps() {
     for (auto &tagIt : tagProps) {
         auto status = ectx()->schemaManager()->toTagID(spaceId, tagIt.first);
         if (!status.ok()) {
-            return Status::Error("No schema found for '%s'", tagIt.first);
+            return Status::Error("No schema found for '%s'", tagIt.first.c_str());
         }
         auto tagId = status.value();
         for (auto &prop : tagIt.second) {
@@ -511,7 +511,7 @@ StatusOr<std::vector<storage::cpp2::PropDef>> GoExecutor::getDstProps() {
     for (auto &tagIt : tagProps) {
         auto status = ectx()->schemaManager()->toTagID(spaceId, tagIt.first);
         if (!status.ok()) {
-            return Status::Error("No schema found for '%s'", tagIt.first);
+            return Status::Error("No schema found for '%s'", tagIt.first.c_str());
         }
         auto tagId = status.value();
         for (auto &prop : tagIt.second) {
diff --git a/src/executor/ShowExecutor.h b/src/executor/ShowExecutor.h
index 6966edf5a6561803b4fa652956d83226cee3a57a..105a5c399425bd5d1a477b420ad69111690cb47f 100644
--- a/src/executor/ShowExecutor.h
+++ b/src/executor/ShowExecutor.h
@@ -37,7 +37,6 @@ public:
 private:
     ShowSentence                             *sentence_{nullptr};
     std::unique_ptr<cpp2::ExecutionResponse>  resp_;
-    ConfigRowItem                            *configItem_{nullptr};
 };
 
 }   // namespace graph
diff --git a/src/parser/TraverseSentences.cpp b/src/parser/TraverseSentences.cpp
index 248727ca4fce194fbe482217a22179df88a40c20..65e6723aa54a92d00f9be7927c83371cb41853c9 100644
--- a/src/parser/TraverseSentences.cpp
+++ b/src/parser/TraverseSentences.cpp
@@ -214,8 +214,7 @@ StatusOr<std::string> EdgeKeyRef::varname() const {
     }
 
     if (uniqVar_.size() != 1) {
-        return Status::SyntaxError(
-            "Near %s, Only support single data source.", toString());
+        return Status::SyntaxError("Near %s, Only support single data source.", toString().c_str());
     }
 
     for (auto &var : uniqVar_) {