From b743e586aebcff74c8e74b7e649aaf1f38a4efe3 Mon Sep 17 00:00:00 2001 From: Mike Taves Date: Sat, 5 Sep 2026 14:27:05 +1200 Subject: [PATCH] Fix 32-bit GCC 13 and later excess precision --- CMakeLists.txt | 8 +++++++- ci/linux_gcc_32bit/start.sh | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe447e9a70..b9b7e8cfd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,7 +131,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") # breaks std::isinf(), std::isnan(), etc. string(APPEND CMAKE_C_FLAGS " -fno-fast-math") string(APPEND CMAKE_CXX_FLAGS " -fno-fast-math") -endif () +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND + CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13 AND + CMAKE_SIZEOF_VOID_P EQUAL 4) + # GCC 13 and later changed their C++ excess precision support, which impacts + # 32-bit builds. This restores the previous behavior. + string(APPEND CMAKE_CXX_FLAGS " -fexcess-precision=fast") +endif() # Add other supported compiler flags if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")) diff --git a/ci/linux_gcc_32bit/start.sh b/ci/linux_gcc_32bit/start.sh index 7b13e58473..2fc007c6a2 100755 --- a/ci/linux_gcc_32bit/start.sh +++ b/ci/linux_gcc_32bit/start.sh @@ -6,7 +6,7 @@ export TRAVIS_OS_NAME=linux export BUILD_NAME=linux_gcc_32bit export TRAVIS_BUILD_DIR="$WORK_DIR" -GCC_VERSION=12 +GCC_VERSION=13 ARCH=i386