llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Zeyi Xu (zeyi2) <details> <summary>Changes</summary> Define `__WCHAR_MIN__`, `__WINT_MIN__`, and `__SIG_ATOMIC_MIN__` for compatibility with GCC. This also fixes targets such as `riscv*-netbsd` that define `WCHAR_MIN` from `__WCHAR_MIN__`. Reference: https://gcc.gnu.org/onlinedocs/gcc-16.1.0/cpp/Common-Predefined-Macros.html Closes #<!-- -->199678 --- Full diff: https://github.com/llvm/llvm-project/pull/208135.diff 4 Files Affected: - (modified) clang/lib/Frontend/InitPreprocessor.cpp (+11) - (modified) clang/test/Preprocessor/init-aarch64.c (+3) - (modified) clang/test/Preprocessor/init-riscv.c (+8) - (modified) clang/test/Preprocessor/init.c (+4) ``````````diff diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 7752ab5131aae..8b6ff844d0daa 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -186,6 +186,14 @@ static void DefineTypeSize(const Twine &MacroName, TargetInfo::IntType Ty, TI.isTypeSigned(Ty), Builder); } +static void DefineTypeMin(const Twine &Prefix, TargetInfo::IntType Ty, + const TargetInfo &TI, MacroBuilder &Builder) { + Builder.defineMacro(Prefix + "_MIN__", + TI.isTypeSigned(Ty) + ? Twine("(-") + Prefix + "_MAX__ - 1)" + : Twine("0") + TI.getTypeConstantSuffix(Ty)); +} + static void DefineFmt(const LangOptions &LangOpts, const Twine &Prefix, TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder) { @@ -1129,7 +1137,9 @@ static void InitializePredefinedMacros(const TargetInfo &TI, DefineTypeSize("__LONG_MAX__", TargetInfo::SignedLong, TI, Builder); DefineTypeSize("__LONG_LONG_MAX__", TargetInfo::SignedLongLong, TI, Builder); DefineTypeSizeAndWidth("__WCHAR", TI.getWCharType(), TI, Builder); + DefineTypeMin("__WCHAR", TI.getWCharType(), TI, Builder); DefineTypeSizeAndWidth("__WINT", TI.getWIntType(), TI, Builder); + DefineTypeMin("__WINT", TI.getWIntType(), TI, Builder); DefineTypeSizeAndWidth("__INTMAX", TI.getIntMaxType(), TI, Builder); DefineTypeSizeAndWidth("__SIZE", TI.getSizeType(), TI, Builder); @@ -1182,6 +1192,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, DefineType("__WCHAR_TYPE__", TI.getWCharType(), Builder); DefineType("__WINT_TYPE__", TI.getWIntType(), Builder); DefineTypeSizeAndWidth("__SIG_ATOMIC", TI.getSigAtomicType(), TI, Builder); + DefineTypeMin("__SIG_ATOMIC", TI.getSigAtomicType(), TI, Builder); if (LangOpts.C23) DefineType("__CHAR8_TYPE__", TI.UnsignedChar, Builder); DefineType("__CHAR16_TYPE__", TI.getChar16Type(), Builder); diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c index 09e3fc926a309..f875c10775e29 100644 --- a/clang/test/Preprocessor/init-aarch64.c +++ b/clang/test/Preprocessor/init-aarch64.c @@ -263,6 +263,7 @@ // AARCH64-NEXT: #define __SHRT_MAX__ 32767 // AARCH64-NEXT: #define __SHRT_WIDTH__ 16 // AARCH64-NEXT: #define __SIG_ATOMIC_MAX__ 2147483647 +// AARCH64-NEXT: #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) // AARCH64-NEXT: #define __SIG_ATOMIC_WIDTH__ 32 // AARCH64-NEXT: #define __SIZEOF_DOUBLE__ 8 // AARCH64-NEXT: #define __SIZEOF_FLOAT__ 4 @@ -393,10 +394,12 @@ // AARCH64-NEXT: #define __USER_LABEL_PREFIX__ // AARCH64-NEXT: #define __VERSION__ "{{.*}}" // AARCH64-NEXT: #define __WCHAR_MAX__ 4294967295U +// AARCH64-NEXT: #define __WCHAR_MIN__ 0U // AARCH64-NEXT: #define __WCHAR_TYPE__ unsigned int // AARCH64-NEXT: #define __WCHAR_UNSIGNED__ 1 // AARCH64-NEXT: #define __WCHAR_WIDTH__ 32 // AARCH64-NEXT: #define __WINT_MAX__ 2147483647 +// AARCH64-NEXT: #define __WINT_MIN__ (-__WINT_MAX__ - 1) // AARCH64-NEXT: #define __WINT_TYPE__ int // AARCH64-NEXT: #define __WINT_WIDTH__ 32 // AARCH64-NEXT: #define __aarch64__ 1 diff --git a/clang/test/Preprocessor/init-riscv.c b/clang/test/Preprocessor/init-riscv.c index 4eeecccff4378..00282e670a0f7 100644 --- a/clang/test/Preprocessor/init-riscv.c +++ b/clang/test/Preprocessor/init-riscv.c @@ -2,9 +2,17 @@ // RUN: FileCheck -match-full-lines -check-prefixes=RV32 %s // RUN: %clang_cc1 -E -dM -triple=riscv64 < /dev/null | \ // RUN: FileCheck -match-full-lines -check-prefixes=RV64 %s +// RUN: %clang_cc1 -E -dM -triple=riscv32-unknown-netbsd < /dev/null | \ +// RUN: FileCheck -match-full-lines -check-prefixes=NETBSD %s +// RUN: %clang_cc1 -E -dM -triple=riscv64-unknown-netbsd < /dev/null | \ +// RUN: FileCheck -match-full-lines -check-prefixes=NETBSD %s // RV32: #define __GCC_CONSTRUCTIVE_SIZE 64 // RV32: #define __GCC_DESTRUCTIVE_SIZE 64 // RV64: #define __GCC_CONSTRUCTIVE_SIZE 64 // RV64: #define __GCC_DESTRUCTIVE_SIZE 64 + +// NETBSD: #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +// NETBSD: #define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +// NETBSD: #define __WINT_MIN__ 0U diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index ef7b76a29a1f5..afea10ea2a38f 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -1949,8 +1949,10 @@ // WEBASSEMBLY-NEXT:#define __SHRT_MAX__ 32767 // WEBASSEMBLY-NEXT:#define __SHRT_WIDTH__ 16 // WEBASSEMBLY32-NEXT:#define __SIG_ATOMIC_MAX__ 2147483647L +// WEBASSEMBLY32-NEXT:#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) // WEBASSEMBLY32-NEXT:#define __SIG_ATOMIC_WIDTH__ 32 // WEBASSEMBLY64-NEXT:#define __SIG_ATOMIC_MAX__ 9223372036854775807L +// WEBASSEMBLY64-NEXT:#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) // WEBASSEMBLY64-NEXT:#define __SIG_ATOMIC_WIDTH__ 64 // WEBASSEMBLY-NEXT:#define __SIZEOF_DOUBLE__ 8 // WEBASSEMBLY-NEXT:#define __SIZEOF_FLOAT__ 4 @@ -2092,10 +2094,12 @@ // WEBASSEMBLY-NEXT:#define __USER_LABEL_PREFIX__ // WEBASSEMBLY-NEXT:#define __VERSION__ "{{.*}}" // WEBASSEMBLY-NEXT:#define __WCHAR_MAX__ 2147483647 +// WEBASSEMBLY-NEXT:#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) // WEBASSEMBLY-NEXT:#define __WCHAR_TYPE__ int // WEBASSEMBLY-NOT:#define __WCHAR_UNSIGNED__ // WEBASSEMBLY-NEXT:#define __WCHAR_WIDTH__ 32 // WEBASSEMBLY-NEXT:#define __WINT_MAX__ 2147483647 +// WEBASSEMBLY-NEXT:#define __WINT_MIN__ (-__WINT_MAX__ - 1) // WEBASSEMBLY-NEXT:#define __WINT_TYPE__ int // WEBASSEMBLY-NOT:#define __WINT_UNSIGNED__ // WEBASSEMBLY-NEXT:#define __WINT_WIDTH__ 32 `````````` </details> https://github.com/llvm/llvm-project/pull/208135 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
