From 708ea5585f5253522a8de52bff087eeef75b9d67 Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Tue, 27 Jun 2023 15:46:20 -0500 Subject: [PATCH] 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 --- cmake/setup_compiler_flags_gnu.cmake | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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. -- 2.39.5