aboutsummaryrefslogtreecommitdiff
path: root/gcc/cppbuiltin.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-11-12 13:33:45 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2014-11-12 13:33:45 +0000
commit2079956a87de079b4a04ac938141e437e60bbff8 (patch)
treed88a9be0aeb520b5e2b97631474f3e34c980ada8 /gcc/cppbuiltin.c
parentb9700367fa3ab754909f3b2930b432c34a74a691 (diff)
downloadgcc-2079956a87de079b4a04ac938141e437e60bbff8.zip
gcc-2079956a87de079b4a04ac938141e437e60bbff8.tar.gz
gcc-2079956a87de079b4a04ac938141e437e60bbff8.tar.bz2
Predefine __NO_MATH_ERRNO__ for -fno-math-errno.
This patch adds a predefined macro __NO_MATH_ERRNO__ for when -fno-math-errno is passed or implied. This allows math.h to provide a more accurate definition of the C99 math_errhandling macro that takes this option into account, and allows for choice of libm functions to be optimized at compile time based on this option. (There may be a case for such interfaces for -fno-rounding-math (default) and -fno-trapping-math as well, but as C99 standard pragmas would allow those to vary on a per-block basis, predefined macros would be problematic as the interface; you can't select a -fno-trapping-math or -fno-rounding-math version of a function in a standard header if a conforming program could then use "#pragma STDC FENV_ACCESS ON" to require a -ftrapping-math -frounding-math version in a particular block. So built-in functions might be a better way of providing access to information about those options.) Bootstrapped with no regressions on x86_64-unknown-linux-gnu. OK to commit? * cppbuiltin.c (define_builtin_macros_for_compilation_flags): Define __NO_MATH_ERRNO__ if -fno-math-errno. * doc/cpp.texi (__NO_MATH_ERRNO__): Document predefined macro. c-family: * c-cppbuiltin.c (c_cpp_builtins_optimize_pragma): Define and undefine __NO_MATH_ERRNO__ based on changes to -fmath-errno state. testsuite: * gcc.dg/no-math-errno-1.c, gcc.dg/no-math-errno-2.c, gcc.dg/no-math-errno-3.c, gcc.dg/no-math-errno-4.c: New tests. From-SVN: r217420
Diffstat (limited to 'gcc/cppbuiltin.c')
-rw-r--r--gcc/cppbuiltin.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/cppbuiltin.c b/gcc/cppbuiltin.c
index 3fc2f8a..474f724 100644
--- a/gcc/cppbuiltin.c
+++ b/gcc/cppbuiltin.c
@@ -102,6 +102,8 @@ define_builtin_macros_for_compilation_flags (cpp_reader *pfile)
cpp_define (pfile, "__FAST_MATH__");
if (flag_signaling_nans)
cpp_define (pfile, "__SUPPORT_SNAN__");
+ if (!flag_errno_math)
+ cpp_define (pfile, "__NO_MATH_ERRNO__");
cpp_define_formatted (pfile, "__FINITE_MATH_ONLY__=%d",
flag_finite_math_only);