From 532731e6f4c0d843d355ff8f2d9f63e4e7854e6a Mon Sep 17 00:00:00 2001 From: bibo38 Date: Thu, 21 Dec 2017 12:36:58 +0100 Subject: Fixed Clang 5.0 compile errors (#4085) * Fixed Clang 5.0 compile errors * Fixed wrong comment * Only disable warnings in Clang 5 or higher * Added a CMake condition for the Clang 5 no-zero-as-null-pointer-constant warning * Now using the use_nullptr branch of the Cuberite specific SQLiteCpp fork --- lib/SQLiteCpp | 2 +- src/Bindings/CMakeLists.txt | 7 +++++-- src/Bindings/DeprecatedBindings.cpp | 2 +- src/Bindings/LuaFunctions.h | 2 +- src/Bindings/LuaState.cpp | 8 ++++++++ src/Bindings/ManualBindings.cpp | 8 ++++++++ src/Entities/Entity.cpp | 2 ++ src/FurnaceRecipe.cpp | 2 +- src/OSSupport/NetworkLookup.h | 2 +- src/Root.cpp | 2 +- src/main.cpp | 10 ++++++++++ 11 files changed, 39 insertions(+), 8 deletions(-) diff --git a/lib/SQLiteCpp b/lib/SQLiteCpp index 7e9983b00..1c83894db 160000 --- a/lib/SQLiteCpp +++ b/lib/SQLiteCpp @@ -1 +1 @@ -Subproject commit 7e9983b00fb44c2e569ba54bfee6f548496d7f61 +Subproject commit 1c83894db9deeea32418089e2ffd0c5d3af85b8b diff --git a/src/Bindings/CMakeLists.txt b/src/Bindings/CMakeLists.txt index 0cfb7add9..45bd573d5 100644 --- a/src/Bindings/CMakeLists.txt +++ b/src/Bindings/CMakeLists.txt @@ -167,8 +167,11 @@ set_source_files_properties(${BINDING_OUTPUTS} PROPERTIES GENERATED TRUE) set_source_files_properties(${CMAKE_SOURCE_DIR}/src/Bindings/Bindings.cpp PROPERTIES COMPILE_FLAGS -Wno-error) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(Bindings.cpp PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} "-Wno-old-style-cast -Wno-missing-prototypes") +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5) # Workaround for VERSION_GREATER_EQUAL, which is only supported on CMake 3.7+ + set(ADDITIONAL_FLAGS "-Wno-zero-as-null-pointer-constant") + endif() + set_source_files_properties(Bindings.cpp PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast -Wno-missing-prototypes ${ADDITIONAL_FLAGS}") endif() if(NOT MSVC) diff --git a/src/Bindings/DeprecatedBindings.cpp b/src/Bindings/DeprecatedBindings.cpp index 3ae1fd990..031b69356 100644 --- a/src/Bindings/DeprecatedBindings.cpp +++ b/src/Bindings/DeprecatedBindings.cpp @@ -270,7 +270,7 @@ static int tolua_AllToLua_StringToMobType00(lua_State* tolua_S) else #endif { - const AString a_MobString = tolua_tocppstring(LuaState, 1, 0); + const AString a_MobString = tolua_tocppstring(LuaState, 1, nullptr); eMonsterType MobType = cMonster::StringToMobType(a_MobString); tolua_pushnumber(LuaState, static_cast(MobType)); tolua_pushcppstring(LuaState, a_MobString); diff --git a/src/Bindings/LuaFunctions.h b/src/Bindings/LuaFunctions.h index b17d7d497..d32322384 100644 --- a/src/Bindings/LuaFunctions.h +++ b/src/Bindings/LuaFunctions.h @@ -6,7 +6,7 @@ inline unsigned int GetTime() { // NB: For caveats, please see https://stackoverflow.com/a/14505248 - return static_cast(std::chrono::seconds(time(0)).count()); + return static_cast(std::chrono::seconds(time(nullptr)).count()); } // tolua_end diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index 82dbfb780..ab3a38618 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -26,6 +26,14 @@ extern "C" +// Hotpatching the Macro to prevent a Clang Warning (0 for pointer used) +#undef lua_tostring +#define lua_tostring(L, i) lua_tolstring(L, (i), nullptr) + + + + + // fwd: "SQLite/lsqlite3.c" extern "C" { diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp index becaa872a..7dd724d44 100644 --- a/src/Bindings/ManualBindings.cpp +++ b/src/Bindings/ManualBindings.cpp @@ -43,6 +43,14 @@ +// Hotpatching the Macro to prevent a Clang Warning (0 for pointer used) +#undef lua_tostring +#define lua_tostring(L, i) lua_tolstring(L, (i), nullptr) + + + + + //////////////////////////////////////////////////////////////////////////////// // LuaCommandHandler: diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 11405d2fd..4245f607d 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -243,6 +243,7 @@ void cEntity::Destroy(bool a_ShouldBroadcast) this->GetUniqueID(), this->GetClass(), ParentChunkCoords.m_ChunkX, ParentChunkCoords.m_ChunkZ ); + UNUSED(ParentChunkCoords); // Non Debug mode only // Make sure that RemoveEntity returned a valid smart pointer // Also, not storing the returned pointer means automatic destruction @@ -1599,6 +1600,7 @@ bool cEntity::DoMoveToWorld(cWorld * a_World, bool a_ShouldSendRespawn, Vector3d a_OldWorld.GetName().c_str(), a_World->GetName().c_str(), OldChunkCoords.m_ChunkX, OldChunkCoords.m_ChunkZ ); + UNUSED(OldChunkCoords); // Non Debug mode only a_World->AddEntity(a_OldWorld.RemoveEntity(*this)); cRoot::Get()->GetPluginManager()->CallHookEntityChangedWorld(*this, a_OldWorld); }); diff --git a/src/FurnaceRecipe.cpp b/src/FurnaceRecipe.cpp index d7e69b181..4e7f13e6a 100644 --- a/src/FurnaceRecipe.cpp +++ b/src/FurnaceRecipe.cpp @@ -272,7 +272,7 @@ void cFurnaceRecipe::ClearRecipes(void) const cFurnaceRecipe::cRecipe * cFurnaceRecipe::GetRecipeFrom(const cItem & a_Ingredient) const { - const cRecipe * BestRecipe = 0; + const cRecipe * BestRecipe = nullptr; for (RecipeList::const_iterator itr = m_pState->Recipes.begin(); itr != m_pState->Recipes.end(); ++itr) { const cRecipe & Recipe = *itr; diff --git a/src/OSSupport/NetworkLookup.h b/src/OSSupport/NetworkLookup.h index e09062f4d..0522622fa 100644 --- a/src/OSSupport/NetworkLookup.h +++ b/src/OSSupport/NetworkLookup.h @@ -20,7 +20,7 @@ class cNetworkLookup : public: cNetworkLookup(); - ~cNetworkLookup(); + ~cNetworkLookup() override; /** Schedule a lookup task for execution. */ void ScheduleLookup(std::function a_Lookup); diff --git a/src/Root.cpp b/src/Root.cpp index cdc25b2a0..64ac44514 100644 --- a/src/Root.cpp +++ b/src/Root.cpp @@ -72,7 +72,7 @@ cRoot::cRoot(void) : cRoot::~cRoot() { - s_Root = 0; + s_Root = nullptr; } diff --git a/src/main.cpp b/src/main.cpp index e3d4542dd..5e6872a9a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -72,6 +72,12 @@ bool cRoot::m_RunAsService = false; #ifndef _DEBUG +// Because SIG_DFL or SIG_IGN could be NULL instead of nullptr, we need to disable the Clang warning here +#if __clang_major__ >= 5 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif + static void NonCtrlHandler(int a_Signal) { LOGD("Terminate event raised from std::signal"); @@ -115,6 +121,10 @@ static void NonCtrlHandler(int a_Signal) default: break; } } + +#if __clang_major__ >= 5 + #pragma clang diagnostic pop +#endif #endif // _DEBUG -- cgit v1.2.3