Index: clang/lib/Frontend/InitPreprocessor.cpp =================================================================== --- clang/lib/Frontend/InitPreprocessor.cpp +++ clang/lib/Frontend/InitPreprocessor.cpp @@ -1039,6 +1039,9 @@ Builder.defineMacro("__USER_LABEL_PREFIX__", TI.getUserLabelPrefix()); + if (!LangOpts.MathErrno) + Builder.defineMacro("__NO_MATH_ERRNO__"); + if (LangOpts.FastMath || LangOpts.FiniteMathOnly) Builder.defineMacro("__FINITE_MATH_ONLY__", "1"); else Index: clang/test/Preprocessor/init-aarch64.c =================================================================== --- clang/test/Preprocessor/init-aarch64.c +++ clang/test/Preprocessor/init-aarch64.c @@ -192,6 +192,7 @@ // AARCH64-NEXT: #define __LONG_MAX__ 9223372036854775807L // AARCH64-NEXT: #define __LP64__ 1 // AARCH64-NEXT: #define __NO_INLINE__ 1 +// AARCH64-NEXT: #define __NO_MATH_ERRNO__ 1 // AARCH64-NEXT: #define __OBJC_BOOL_IS_BOOL 0 // AARCH64-NEXT: #define __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES 3 // AARCH64-NEXT: #define __OPENCL_MEMORY_SCOPE_DEVICE 2 Index: clang/test/Preprocessor/init.c =================================================================== --- clang/test/Preprocessor/init.c +++ clang/test/Preprocessor/init.c @@ -1691,6 +1691,7 @@ // WEBASSEMBLY64-NEXT:#define __LONG_MAX__ 9223372036854775807L // WEBASSEMBLY64-NEXT:#define __LP64__ 1 // WEBASSEMBLY-NEXT:#define __NO_INLINE__ 1 +// WEBASSEMBLY-NEXT:#define __NO_MATH_ERRNO__ 1 // WEBASSEMBLY-NEXT:#define __OBJC_BOOL_IS_BOOL 0 // WEBASSEMBLY-NEXT:#define __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES 3 // WEBASSEMBLY-NEXT:#define __OPENCL_MEMORY_SCOPE_DEVICE 2 Index: clang/test/Preprocessor/predefined-macros.c =================================================================== --- clang/test/Preprocessor/predefined-macros.c +++ clang/test/Preprocessor/predefined-macros.c @@ -60,6 +60,15 @@ // RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-FAST-MATH // CHECK-FAST-MATH: #define __FAST_MATH__ 1 // CHECK-FAST-MATH: #define __FINITE_MATH_ONLY__ 1 +// CHECK-FAST-MATH: #define __NO_MATH_ERRNO__ 1 +// +// RUN: %clang_cc1 %s -E -dM -fmath-errno -o - \ +// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-MATH-ERRNO +// CHECK-MATH-ERRNO-NOT: __NO_MATH_ERRNO__ +// +// RUN: %clang %s -E -dM -fno-math-errno -o - \ +// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-NO-MATH-ERRNO +// CHECK-NO-MATH-ERRNO: #define __NO_MATH_ERRNO__ 1 // // RUN: %clang_cc1 %s -E -dM -ffinite-math-only -o - \ // RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-FINITE-MATH-ONLY