[clang] [clang] Extend clang's <limits.h> to define *LONG_LONG*_ macros for bionic (PR #115406)

via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 13 10:48:30 PST 2024


https://github.com/ZijunZhaoCCK updated https://github.com/llvm/llvm-project/pull/115406

>From eda669f73765a957cc47d3d684a6443ed2f75edf Mon Sep 17 00:00:00 2001
From: Zijun <zijunzhao at google.com>
Date: Fri, 8 Nov 2024 01:04:21 +0000
Subject: [PATCH 1/4] Extend clang's <limits.h> to define *LONG_LONG*_ macros
 for bionic

---
 clang/lib/Headers/limits.h | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/clang/lib/Headers/limits.h b/clang/lib/Headers/limits.h
index 56dffe568486cc..9879fe81faa651 100644
--- a/clang/lib/Headers/limits.h
+++ b/clang/lib/Headers/limits.h
@@ -111,11 +111,12 @@
 #define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL)
 #endif
 
-/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension.  It's too bad
-   that we don't have something like #pragma poison that could be used to
-   deprecate a macro - the code should just use LLONG_MAX and friends.
+/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. Bionic also
+   defines them. It's too bad that we don't have something like #pragma poison
+   that could be used to deprecate a macro - the code should just use LLONG_MAX
+   and friends.
  */
-#if defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__)
+#if (defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__)) || defined(__BIONIC__)
 
 #undef   LONG_LONG_MIN
 #undef   LONG_LONG_MAX

>From b727c41e93ee0fa5f3cc2addf4f1b67ffedc8879 Mon Sep 17 00:00:00 2001
From: Zijun <zijunzhao at google.com>
Date: Fri, 8 Nov 2024 01:04:21 +0000
Subject: [PATCH 2/4] Extend clang's <limits.h> to define *LONG_LONG*_ macros
 for bionic

---
 clang/lib/Headers/limits.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/clang/lib/Headers/limits.h b/clang/lib/Headers/limits.h
index 9879fe81faa651..82e07f5a494951 100644
--- a/clang/lib/Headers/limits.h
+++ b/clang/lib/Headers/limits.h
@@ -111,10 +111,17 @@
 #define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL)
 #endif
 
+<<<<<<< HEAD
 /* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. Bionic also
    defines them. It's too bad that we don't have something like #pragma poison
    that could be used to deprecate a macro - the code should just use LLONG_MAX
    and friends.
+=======
+/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. Android's
+   bionic also defines them. It's too bad that we don't have something like
+   #pragma poison that could be used to deprecate a macro - the code should just
+   use LLONG_MAX and friends.
+>>>>>>> 16ef50bd1f66 (Extend clang's <limits.h> to define *LONG_LONG*_ macros for bionic)
  */
 #if (defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__)) || defined(__BIONIC__)
 

>From 2cb4ee5d644f42b54f93e8e07fe61b93dc6de2f1 Mon Sep 17 00:00:00 2001
From: Zijun <zijunzhao at google.com>
Date: Fri, 8 Nov 2024 01:04:21 +0000
Subject: [PATCH 3/4] Extend clang's <limits.h> to define *LONG_LONG*_ macros
 for bionic

---
 clang/lib/Headers/limits.h | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/clang/lib/Headers/limits.h b/clang/lib/Headers/limits.h
index 82e07f5a494951..bc3dfb1d6d0d1c 100644
--- a/clang/lib/Headers/limits.h
+++ b/clang/lib/Headers/limits.h
@@ -111,17 +111,10 @@
 #define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL)
 #endif
 
-<<<<<<< HEAD
-/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. Bionic also
-   defines them. It's too bad that we don't have something like #pragma poison
-   that could be used to deprecate a macro - the code should just use LLONG_MAX
-   and friends.
-=======
 /* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. Android's
    bionic also defines them. It's too bad that we don't have something like
    #pragma poison that could be used to deprecate a macro - the code should just
    use LLONG_MAX and friends.
->>>>>>> 16ef50bd1f66 (Extend clang's <limits.h> to define *LONG_LONG*_ macros for bionic)
  */
 #if (defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__)) || defined(__BIONIC__)
 

>From a69cebad4e9f0b24bb4fa704157888c4604a71b2 Mon Sep 17 00:00:00 2001
From: Zijun <zijunzhao at google.com>
Date: Fri, 8 Nov 2024 01:04:21 +0000
Subject: [PATCH 4/4] Extend clang's <limits.h> to define *LONG_LONG*_ macros
 for Android's bionic

---
 clang/docs/ReleaseNotes.rst   | 1 +
 clang/test/Headers/limits.cpp | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 3fc275b528d215..3d75dbe36c05b3 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -319,6 +319,7 @@ C23 Feature Support
 
 - Clang now supports `N3029 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3029.htm>`_ Improved Normal Enumerations.
 - Clang now officially supports `N3030 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3030.htm>`_ Enhancements to Enumerations. Clang already supported it as an extension, so there were no changes to compiler behavior.
+- Extend clang's <limits.h> to define *LONG_LONG*_ macros for Android's bionic.
 
 Non-comprehensive list of changes in this release
 -------------------------------------------------
diff --git a/clang/test/Headers/limits.cpp b/clang/test/Headers/limits.cpp
index da7a64901831d5..132e5bc24a0c92 100644
--- a/clang/test/Headers/limits.cpp
+++ b/clang/test/Headers/limits.cpp
@@ -4,6 +4,9 @@
 // RUN: %clang_cc1 -std=c17 -ffreestanding -fsyntax-only -verify -x c %s
 // RUN: %clang_cc1 -std=c2x -ffreestanding -fsyntax-only -verify -x c %s
 
+// Specifically test arm64 linux platforms.
+// RUN: %clang_cc1 -triple arm64-linux -ffreestanding -fsyntax-only -verify -x c %s
+
 // Specifically test 16-bit int platforms.
 // RUN: %clang_cc1 -triple=avr -ffreestanding -fsyntax-only -verify -x c %s
 // RUN: %clang_cc1 -triple=avr -std=c++11 -ffreestanding -fsyntax-only -verify %s



More information about the cfe-commits mailing list