Skip to content

Commit d47c86f

Browse files
authored
Merge pull request #3697 from roystgnr/fpe_updates
Update configuration to add default --enable-fpe-safety
2 parents 48d2447 + 01a843e commit d47c86f

File tree

5 files changed

+197
-21
lines changed

5 files changed

+197
-21
lines changed

configure

+192-18
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,7 @@ with_cxx_std
11961196
enable_sanitize
11971197
enable_glibcxx_debugging
11981198
enable_glibcxx_debugging_cppunit
1199+
enable_fpe_safety
11991200
enable_coverage
12001201
with_methods
12011202
enable_werror
@@ -2014,6 +2015,7 @@ Optional Features:
20142015
dbg mode
20152016
--enable-glibcxx-debugging-cppunit
20162017
Use GLIBCXX debugging flags for unit tests
2018+
--disable-fpe-safety remove FPE-trapping compiler flags
20172019
--enable-coverage configure code coverage analysis tools
20182020
--enable-werror Turn compilation warnings into errors
20192021
--enable-paranoid-warnings
@@ -8038,34 +8040,70 @@ fi
80388040
if test "x$compiler_brand_detected" = "xno"
80398041
then :
80408042

8041-
clang_version="`($CXX --version 2>&1)`"
8042-
is_clang="`echo $clang_version | grep 'clang'`"
8043+
ACSM_CLANG_VERSION_STRING="`($CXX --version 2>&1)`"
8044+
is_clang="`echo $ACSM_CLANG_VERSION_STRING | grep 'clang'`"
80438045

80448046
if test "x$is_clang" != "x"
80458047
then :
80468048

8047-
is_apple_clang="`echo $clang_version | grep 'Apple'`"
8049+
is_apple_clang="`echo $ACSM_CLANG_VERSION_STRING | grep 'Apple'`"
80488050
clang_vendor="clang"
80498051
if test "x$is_apple_clang" != "x"
80508052
then :
80518053
clang_vendor="Apple clang"
80528054
fi
80538055

8054-
clang_major_minor=unknown
8055-
8056-
if test "x$PERL" != "x"
8057-
then :
8058-
8059-
clang_major_minor=`echo $clang_version | $PERL -ne 'print $1 if /version\s(\d+\.\d+)/'`
8060-
if test "x$clang_major_minor" = "x"
8061-
then :
8062-
clang_major_minor=unknown
8063-
fi
8064-
8065-
fi
8056+
case "x$ACSM_CLANG_VERSION_STRING" in #(
8057+
*clang\ version\ 17.*) :
8058+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-17.x >>>" >&5
8059+
printf "%s\n" "<<< C++ compiler is clang-17.x >>>" >&6; }
8060+
ACSM_CLANG_VERSION=17 ;; #(
8061+
*clang\ version\ 16.*) :
8062+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-16.x >>>" >&5
8063+
printf "%s\n" "<<< C++ compiler is clang-16.x >>>" >&6; }
8064+
ACSM_CLANG_VERSION=16 ;; #(
8065+
*clang\ version\ 15.*) :
8066+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-15.x >>>" >&5
8067+
printf "%s\n" "<<< C++ compiler is clang-15.x >>>" >&6; }
8068+
ACSM_CLANG_VERSION=15 ;; #(
8069+
*clang\ version\ 14.*) :
8070+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-14.x >>>" >&5
8071+
printf "%s\n" "<<< C++ compiler is clang-14.x >>>" >&6; }
8072+
ACSM_CLANG_VERSION=14 ;; #(
8073+
*clang\ version\ 13.*) :
8074+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-13.x >>>" >&5
8075+
printf "%s\n" "<<< C++ compiler is clang-13.x >>>" >&6; }
8076+
ACSM_CLANG_VERSION=13 ;; #(
8077+
*clang\ version\ 12.*) :
8078+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-12.x >>>" >&5
8079+
printf "%s\n" "<<< C++ compiler is clang-12.x >>>" >&6; }
8080+
ACSM_CLANG_VERSION=12 ;; #(
8081+
*clang\ version\ 11.*) :
8082+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-11.x >>>" >&5
8083+
printf "%s\n" "<<< C++ compiler is clang-11.x >>>" >&6; }
8084+
ACSM_CLANG_VERSION=11 ;; #(
8085+
*clang\ version\ 10.*) :
8086+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-10.x >>>" >&5
8087+
printf "%s\n" "<<< C++ compiler is clang-10.x >>>" >&6; }
8088+
ACSM_CLANG_VERSION=10 ;; #(
8089+
*clang\ version\ 9.*) :
8090+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-9.x >>>" >&5
8091+
printf "%s\n" "<<< C++ compiler is clang-9.x >>>" >&6; }
8092+
ACSM_CLANG_VERSION=9 ;; #(
8093+
*clang\ version\ 8.*) :
8094+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-8.x >>>" >&5
8095+
printf "%s\n" "<<< C++ compiler is clang-8.x >>>" >&6; }
8096+
ACSM_CLANG_VERSION=8 ;; #(
8097+
*clang\ version\ 7.*) :
8098+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is clang-7.x >>>" >&5
8099+
printf "%s\n" "<<< C++ compiler is clang-7.x >>>" >&6; }
8100+
ACSM_CLANG_VERSION=7 ;; #(
8101+
*) :
8102+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler \"$ACSM_CLANG_VERSION\" is unknown but accepted clang version >>>" >&5
8103+
printf "%s\n" "<<< C++ compiler \"$ACSM_CLANG_VERSION\" is unknown but accepted clang version >>>" >&6; }
8104+
ACSM_CLANG_VERSION=other ;;
8105+
esac
80668106

8067-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< C++ compiler is ${clang_vendor}, version ${clang_major_minor} >>>" >&5
8068-
printf "%s\n" "<<< C++ compiler is ${clang_vendor}, version ${clang_major_minor} >>>" >&6; }
80698107
ACSM_GXX_VERSION=clang
80708108
compiler_brand_detected=yes
80718109

@@ -26494,7 +26532,17 @@ fi
2649426532
ACSM_CXXFLAGS_DBG="$ACSM_CXXFLAGS_DBG -Wunused-parameter -Wunused -Wpointer-arith -Wformat -Wparentheses -Qunused-arguments -Woverloaded-virtual -fno-limit-debug-info"
2649526533
ACSM_NODEPRECATEDFLAG="-Wno-deprecated"
2649626534

26497-
ACSM_FPE_SAFETY_FLAGS="-ftrapping-math"
26535+
if test "x$ACSM_CLANG_VERSION" = "xother" || test $ACSM_CLANG_VERSION -ge 10
26536+
then :
26537+
ACSM_FPE_SAFETY_FLAGS="-ftrapping-math"
26538+
else $as_nop
26539+
ACSM_FPE_SAFETY_FLAGS=""
26540+
fi
26541+
26542+
if test "x$ACSM_CLANG_VERSION" = "xother" || test $ACSM_CLANG_VERSION -ge 12
26543+
then :
26544+
ACSM_FPE_SAFETY_FLAGS="$ACSM_FPE_SAFETY_FLAGS -Wno-unsupported-floating-point-opt"
26545+
fi
2649826546

2649926547
ACSM_PARANOID_FLAGS="-Wall -Wextra -Wcast-align -Wdisabled-optimization -Wformat=2"
2650026548
ACSM_PARANOID_FLAGS="$ACSM_PARANOID_FLAGS -Wformat-nonliteral -Wformat-security -Wformat-y2k"
@@ -26596,6 +26644,132 @@ fi
2659626644

2659726645

2659826646

26647+
26648+
26649+
26650+
# Check whether --enable-fpe-safety was given.
26651+
if test ${enable_fpe_safety+y}
26652+
then :
26653+
enableval=$enable_fpe_safety; case "${enableval}" in #(
26654+
yes) :
26655+
acsm_enablefpesafety=yes ;; #(
26656+
no) :
26657+
acsm_enablefpesafety=no ;; #(
26658+
*) :
26659+
as_fn_error $? "bad value ${enableval} for --enable-fpe-safety" "$LINENO" 5 ;;
26660+
esac
26661+
else $as_nop
26662+
acsm_enablefpesafety=yes
26663+
fi
26664+
26665+
26666+
if test "$acsm_enablefpesafety" = "yes"
26667+
then :
26668+
26669+
ac_ext=c
26670+
ac_cpp='$CPP $CPPFLAGS'
26671+
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
26672+
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
26673+
ac_compiler_gnu=$ac_cv_c_compiler_gnu
26674+
26675+
ac_fpe_safety_save_CFLAGS="$CFLAGS"
26676+
CFLAGS="${CFLAGS} ${ACSM_FPE_SAFETY_FLAGS}"
26677+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
26678+
/* end confdefs.h. */
26679+
26680+
int
26681+
main (void)
26682+
{
26683+
26684+
;
26685+
return 0;
26686+
}
26687+
_ACEOF
26688+
if ac_fn_c_try_compile "$LINENO"
26689+
then :
26690+
26691+
else $as_nop
26692+
26693+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to compile C with FPE safety flag ($CC $ACSM_FPE_SAFETY_FLAGS)" >&5
26694+
printf "%s\n" "$as_me: WARNING: unable to compile C with FPE safety flag ($CC $ACSM_FPE_SAFETY_FLAGS)" >&2;}
26695+
ACSM_FPE_SAFETY_FLAGS=""
26696+
26697+
fi
26698+
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26699+
CFLAGS="$ac_fpe_safety_save_CFLAGS"
26700+
ac_ext=cpp
26701+
ac_cpp='$CXXCPP $CPPFLAGS'
26702+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
26703+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
26704+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
26705+
26706+
26707+
ac_ext=cpp
26708+
ac_cpp='$CXXCPP $CPPFLAGS'
26709+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
26710+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
26711+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
26712+
26713+
ac_fpe_safety_save_CXXFLAGS="$CXXFLAGS"
26714+
CXXFLAGS="${CXXFLAGS} ${ACSM_FPE_SAFETY_FLAGS}"
26715+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
26716+
/* end confdefs.h. */
26717+
26718+
int
26719+
main (void)
26720+
{
26721+
26722+
;
26723+
return 0;
26724+
}
26725+
_ACEOF
26726+
if ac_fn_cxx_try_compile "$LINENO"
26727+
then :
26728+
26729+
else $as_nop
26730+
26731+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to compile C++ with FPE safety flag ($CXX $ACSM_FPE_SAFETY_FLAGS)" >&5
26732+
printf "%s\n" "$as_me: WARNING: unable to compile C++ with FPE safety flag ($CXX $ACSM_FPE_SAFETY_FLAGS)" >&2;}
26733+
ACSM_FPE_SAFETY_FLAGS=""
26734+
26735+
fi
26736+
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26737+
CXXFLAGS="$ac_fpe_safety_save_CXXFLAGS"
26738+
ac_ext=cpp
26739+
ac_cpp='$CXXCPP $CPPFLAGS'
26740+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
26741+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
26742+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
26743+
26744+
26745+
if test "x$ACSM_FPE_SAFETY_FLAGS" != "x"
26746+
then :
26747+
26748+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< Adding $ACSM_FPE_SAFETY_FLAGS for FPE safety >>>" >&5
26749+
printf "%s\n" "<<< Adding $ACSM_FPE_SAFETY_FLAGS for FPE safety >>>" >&6; }
26750+
26751+
else $as_nop
26752+
26753+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< No flags found to use for FPE safety >>>" >&5
26754+
printf "%s\n" "<<< No flags found to use for FPE safety >>>" >&6; }
26755+
26756+
fi
26757+
ACSM_CXXFLAGS_OPT="$ACSM_CXXFLAGS_OPT $ACSM_FPE_SAFETY_FLAGS"
26758+
ACSM_CXXFLAGS_DBG="$ACSM_CXXFLAGS_DBG $ACSM_FPE_SAFETY_FLAGS"
26759+
ACSM_CXXFLAGS_DEVEL="$ACSM_CXXFLAGS_DEVEL $ACSM_FPE_SAFETY_FLAGS"
26760+
26761+
ACSM_CFLAGS_OPT="$ACSM_CFLAGS_OPT $ACSM_FPE_SAFETY_FLAGS"
26762+
ACSM_CFLAGS_DBG="$ACSM_CFLAGS_DBG $ACSM_FPE_SAFETY_FLAGS"
26763+
ACSM_CFLAGS_DEVEL="$ACSM_CFLAGS_DEVEL $ACSM_FPE_SAFETY_FLAGS"
26764+
26765+
else $as_nop
26766+
26767+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< Not enabling flags for FPE safety >>>" >&5
26768+
printf "%s\n" "<<< Not enabling flags for FPE safety >>>" >&6; }
26769+
26770+
fi
26771+
26772+
2659926773
CXXFLAGS_OPT="$ACSM_CXXFLAGS_OPT"
2660026774
CXXFLAGS_DEVEL="$ACSM_CXXFLAGS_DEVEL"
2660126775
CXXFLAGS_DBG="$ACSM_CXXFLAGS_DBG"

m4/compiler.m4

+2
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ AC_DEFUN([LIBMESH_SET_BUILD_FLAGS],
203203
204204
ACSM_SET_GLIBCXX_DEBUG_FLAGS
205205
206+
ACSM_SET_FPE_SAFETY_FLAGS
207+
206208
CXXFLAGS_OPT="$ACSM_CXXFLAGS_OPT"
207209
CXXFLAGS_DEVEL="$ACSM_CXXFLAGS_DEVEL"
208210
CXXFLAGS_DBG="$ACSM_CXXFLAGS_DBG"

0 commit comments

Comments
 (0)