From: Matthias Maier Date: Tue, 27 Jun 2023 20:46:20 +0000 (-0500) Subject: CMake: enable -ffp-exceptions-behavior=strict when compiling with clang X-Git-Tag: relicensing~859^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F15509%2Fhead;p=dealii.git CMake: enable -ffp-exceptions-behavior=strict when compiling with clang We have to ensure that we emit floating-point instructions in debug mode that preserve the occurence of floating-point exceptions and don't introduce new ones. gcc plays nicely in this regard by enabling `-ftrapping-math` per default, at least for the level of optimization we have in debug mode. clang however is more aggressive and assumes that it can optimize code disregarding precise floating-point exception semantics. We thus set `-ffp-exceptions-behavior=strict` in debug mode to ensure that our testsuite doesn't run into false positive floating-point exceptions. See https://github.com/dealii/dealii/issues/15496 --- diff --git a/cmake/setup_compiler_flags_gnu.cmake b/cmake/setup_compiler_flags_gnu.cmake index 080f606359..aeed104ec6 100644 --- a/cmake/setup_compiler_flags_gnu.cmake +++ b/cmake/setup_compiler_flags_gnu.cmake @@ -197,6 +197,23 @@ if (CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND DEAL_II_DEFINITIONS_DEBUG "DEBUG") + # + # We have to ensure that we emit floating-point instructions in debug + # mode that preserve the occurence of floating-point exceptions and don't + # introduce new ones. gcc plays nicely in this regard by enabling + # `-ftrapping-math` per default, at least for the level of optimization + # we have in debug mode. clang however is more aggressive and assumes + # that it can optimize code disregarding precise floating-point exception + # semantics. + # + # We thus set `-ffp-exceptions-behavior=strict` in debug mode to ensure + # that our testsuite doesn't run into false positive floating-point + # exceptions. See + # + # https://github.com/dealii/dealii/issues/15496 + # + enable_if_supported(DEAL_II_CXX_FLAGS_DEBUG "-ffp-exception-behavior=strict") + # # In recent versions, gcc often eliminates too much debug information # using '-Og' to be useful.