diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 629f9911066168..ec40170b0a788d 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -1039,6 +1039,9 @@ static void InitializePredefinedMacros(const TargetInfo &TI, 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 diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c index 3b6f4ddaabde8b..8787d24f01cee7 100644 --- a/clang/test/Preprocessor/init-aarch64.c +++ b/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 diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index 7d838413b8513b..45d494112a4f58 100644 --- a/clang/test/Preprocessor/init.c +++ b/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 diff --git a/clang/test/Preprocessor/predefined-macros.c b/clang/test/Preprocessor/predefined-macros.c index 2304eb82b50df2..0b67cbe233ca26 100644 --- a/clang/test/Preprocessor/predefined-macros.c +++ b/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