+2014-11-12 Joseph Myers <joseph@codesourcery.com>
+
+ * 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.
+
2014-11-12 Richard Biener <rguenther@suse.de>
* genmatch.c (::gen_transform): Add capture_info and
+2014-11-12 Joseph Myers <joseph@codesourcery.com>
+
+ * c-cppbuiltin.c (c_cpp_builtins_optimize_pragma): Define and
+ undefine __NO_MATH_ERRNO__ based on changes to -fmath-errno state.
+
2014-11-12 Jakub Jelinek <jakub@redhat.com>
PR c/59708
else if (prev->x_flag_signaling_nans && !cur->x_flag_signaling_nans)
cpp_undef (pfile, "__SUPPORT_SNAN__");
+ if (!prev->x_flag_errno_math && cur->x_flag_errno_math)
+ cpp_undef (pfile, "__NO_MATH_ERRNO__");
+ else if (prev->x_flag_errno_math && !cur->x_flag_errno_math)
+ cpp_define (pfile, "__NO_MATH_ERRNO__");
+
if (!prev->x_flag_finite_math_only && cur->x_flag_finite_math_only)
{
cpp_undef (pfile, "__FINITE_MATH_ONLY__");
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);
was used). If 1 or more, it indicates that it is intended to support
those requirements; this does not mean that all relevant language
features are supported by GCC.
+
+@item __NO_MATH_ERRNO__
+This macro is defined if @option{-fno-math-errno} is used, or enabled
+by another option such as @option{-ffast-math} or by default.
@end table
@node System-specific Predefined Macros
+2014-11-12 Joseph Myers <joseph@codesourcery.com>
+
+ * 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.
+
2014-11-12 H.J. Lu <hongjiu.lu@intel.com>
PR testsuite/63830
--- /dev/null
+/* Test __NO_MATH_ERRNO__ is defined with -fno-math-errno. */
+/* { dg-do compile } */
+/* { dg-options "-fno-math-errno" } */
+
+#ifndef __NO_MATH_ERRNO__
+#error "__NO_MATH_ERRNO__ not defined"
+#endif
--- /dev/null
+/* Test __NO_MATH_ERRNO__ is defined with -ffast-math. */
+/* { dg-do compile } */
+/* { dg-options "-ffast-math" } */
+
+#ifndef __NO_MATH_ERRNO__
+#error "__NO_MATH_ERRNO__ not defined"
+#endif
--- /dev/null
+/* Test __NO_MATH_ERRNO__ is not defined with -fmath-errno. */
+/* { dg-do compile } */
+/* { dg-options "-fmath-errno" } */
+
+#ifdef __NO_MATH_ERRNO__
+#error "__NO_MATH_ERRNO__ defined"
+#endif
--- /dev/null
+/* Test __NO_MATH_ERRNO__ is defined and undefined by pragmas. */
+/* { dg-do compile } */
+/* { dg-options "-fmath-errno" } */
+
+#ifdef __NO_MATH_ERRNO__
+#error "__NO_MATH_ERRNO__ defined"
+#endif
+
+#pragma GCC optimize "-fno-math-errno"
+#ifndef __NO_MATH_ERRNO__
+#error "__NO_MATH_ERRNO__ not defined"
+#endif
+
+#pragma GCC optimize "-fmath-errno"
+#ifdef __NO_MATH_ERRNO__
+#error "__NO_MATH_ERRNO__ defined"
+#endif