From 75a5ea01c19563ae1ba427e9206f2eae637d6070 Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Thu, 13 Feb 2020 17:13:07 -0700 Subject: [PATCH] Cleanup/MSVC: Enable C++ conformance mode on compiler versions that support it. MSVC has a conformance mode (/permissive-) where the C++ standard is more strictly enforced. This mode is available on MSVC 15.5+ [1] This patch enables this mode on compilers that support it and cleans up the few violations it threw up in the process. - Mantaflow was using M_PI without requesting them using the _USE_MATH_DEFINES define to opt in to non default behaviour. - Collada did not include the right header for std::cerr, this seemingly was fixed for other platforms already but put inside a platform guard. - Ghost had some scoping issues regarding uninitialized variables and goto behaviour Second landing of this patch, earlier commit was reverted due to some compiler configurations having slipped though testing [1] https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance Differential Revision: https://developer.blender.org/D6824 Reviewed By: brecht --- .../cmake/platform/platform_win32.cmake | 8 +++++++ extern/mantaflow/CMakeLists.txt | 4 ++++ intern/ghost/intern/GHOST_ContextWGL.cpp | 24 +++++++++++-------- intern/mantaflow/CMakeLists.txt | 5 ++++ source/blender/collada/MeshImporter.cpp | 5 +--- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 653b3a9f508..cfa4f1c9bf7 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -144,6 +144,14 @@ else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP /bigobj") endif() +# C++ standards conformace (/permissive-) is available on msvc 15.5 (1912) and up +if(MSVC_VERSION GREATER 1911 AND NOT MSVC_CLANG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-") + # Two-phase name lookup does not place nicely with OpenMP yet, so disable for now + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:twoPhase-") +endif() + + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd /ZI") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd /ZI") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD") diff --git a/extern/mantaflow/CMakeLists.txt b/extern/mantaflow/CMakeLists.txt index d2f78f7ab6c..99d985578bd 100644 --- a/extern/mantaflow/CMakeLists.txt +++ b/extern/mantaflow/CMakeLists.txt @@ -54,6 +54,10 @@ if(WITH_OPENVDB) add_definitions(-DOPENVDB_STATICLIB) endif() +if(WIN32) + add_definitions(-D_USE_MATH_DEFINES) +endif() + set(INC ${MANTA_PP} ${MANTA_PP}/fileio diff --git a/intern/ghost/intern/GHOST_ContextWGL.cpp b/intern/ghost/intern/GHOST_ContextWGL.cpp index d4851450ce8..6d5d4f75351 100644 --- a/intern/ghost/intern/GHOST_ContextWGL.cpp +++ b/intern/ghost/intern/GHOST_ContextWGL.cpp @@ -647,9 +647,11 @@ GHOST_TSuccess GHOST_ContextWGL::initializeDrawingContext() /* Silence warnings interpreted as errors by users when trying to get * a context with version higher than 3.3 Core. */ - const bool silent = m_contextMajorVersion > 3; - if (!WIN32_CHK_SILENT(m_hGLRC != NULL, silent)) { - goto error; + { + const bool silent = m_contextMajorVersion > 3; + if (!WIN32_CHK_SILENT(m_hGLRC != NULL, silent)) { + goto error; + } } s_sharedCount++; @@ -680,15 +682,17 @@ GHOST_TSuccess GHOST_ContextWGL::initializeDrawingContext() ::SwapBuffers(m_hDC); #ifndef NDEBUG - const char *vendor = reinterpret_cast(glGetString(GL_VENDOR)); - const char *renderer = reinterpret_cast(glGetString(GL_RENDERER)); - const char *version = reinterpret_cast(glGetString(GL_VERSION)); + { + const char *vendor = reinterpret_cast(glGetString(GL_VENDOR)); + const char *renderer = reinterpret_cast(glGetString(GL_RENDERER)); + const char *version = reinterpret_cast(glGetString(GL_VERSION)); - reportContextString("Vendor", m_dummyVendor, vendor); - reportContextString("Renderer", m_dummyRenderer, renderer); - reportContextString("Version", m_dummyVersion, version); + reportContextString("Vendor", m_dummyVendor, vendor); + reportContextString("Renderer", m_dummyRenderer, renderer); + reportContextString("Version", m_dummyVersion, version); - fprintf(stderr, "Context Version: %d.%d\n", m_contextMajorVersion, m_contextMinorVersion); + fprintf(stderr, "Context Version: %d.%d\n", m_contextMajorVersion, m_contextMinorVersion); + } #endif return GHOST_kSuccess; diff --git a/intern/mantaflow/CMakeLists.txt b/intern/mantaflow/CMakeLists.txt index 2d49f96a451..b2a0ab30a0c 100644 --- a/intern/mantaflow/CMakeLists.txt +++ b/intern/mantaflow/CMakeLists.txt @@ -30,6 +30,11 @@ if(WITH_OPENVDB) add_definitions(-DOPENVDB_STATICLIB) endif() +if(WIN32) + add_definitions(-D_USE_MATH_DEFINES) +endif() + + set(INC extern intern/strings diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp index 14c09a95d10..bc6dd4202b1 100644 --- a/source/blender/collada/MeshImporter.cpp +++ b/source/blender/collada/MeshImporter.cpp @@ -19,10 +19,7 @@ */ #include - -#if !defined(WIN32) -# include -#endif +#include /* COLLADABU_ASSERT, may be able to remove later */ #include "COLLADABUPlatform.h"