Author: Alex Xu (Hello71) Date: 2022-01-10T08:45:46-05:00 New Revision: f282b6809105075b65974989459ee420ecd406e9
URL: https://github.com/llvm/llvm-project/commit/f282b6809105075b65974989459ee420ecd406e9 DIFF: https://github.com/llvm/llvm-project/commit/f282b6809105075b65974989459ee420ecd406e9.diff LOG: set __NO_MATH_ERRNO__ if -fno-math-errno This causes modern glibc to unset math_errhandling MATH_ERRNO. gcc 12 also sets some other macros, but most of them are associated with flags ignored by clang, so without library examples, it is difficult to determine whether they should be set. I think setting this one macro is OK for now. Added: Modified: clang/lib/Frontend/InitPreprocessor.cpp clang/test/Preprocessor/init-aarch64.c clang/test/Preprocessor/init.c clang/test/Preprocessor/predefined-macros.c Removed: ################################################################################ diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 629f991106616..ec40170b0a788 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 3b6f4ddaabde8..8787d24f01cee 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 7d838413b8513..45d494112a4f5 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 2304eb82b50df..0b67cbe233ca2 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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits