This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new af347fa3 chore: Remove unnecessary use of `__COUNTER__` (#853)
af347fa3 is described below

commit af347fa31d0e2dca6f6b6f818849a437244b6bf5
Author: Dewey Dunnington <[email protected]>
AuthorDate: Thu Mar 5 21:02:52 2026 -0600

    chore: Remove unnecessary use of `__COUNTER__` (#853)
    
    In https://github.com/apache/arrow-adbc/pull/4044, ADBC has to work
    around a clang warning that declares `__COUNTER__` an extension. We
    don't strictly need it here so I just removed the usage. Claude Opus
    seems to think this is safe because of the `do { ... } while(0);`
    scoping but alternative opinions are welcome!
---
 .github/workflows/r-check.yaml      |  1 -
 src/nanoarrow/common/inline_types.h | 20 +++++++++++++++-----
 src/nanoarrow/device/cuda.c         | 12 ++++++------
 src/nanoarrow/hpp/exception.hpp     |  6 +++---
 4 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/.github/workflows/r-check.yaml b/.github/workflows/r-check.yaml
index d9387234..e3190e94 100644
--- a/.github/workflows/r-check.yaml
+++ b/.github/workflows/r-check.yaml
@@ -40,7 +40,6 @@ jobs:
       matrix:
         config:
           - {os: macOS-latest,   r: 'release'}
-          - {os: windows-latest, r: '4.1'}
           - {os: windows-latest, r: '4.2'}
           - {os: windows-latest, r: 'release'}
           - {os: ubuntu-latest,   r: 'devel', http-user-agent: 'release'}
diff --git a/src/nanoarrow/common/inline_types.h 
b/src/nanoarrow/common/inline_types.h
index 8748c67f..73110249 100644
--- a/src/nanoarrow/common/inline_types.h
+++ b/src/nanoarrow/common/inline_types.h
@@ -142,6 +142,13 @@ struct ArrowArrayStream {
     if (NAME) return NAME;                        \
   } while (0)
 
+// __COUNTER__ is not guaranteed to be available and some compiler warnings 
may occur
+// if we use it (-Wc2y-extensions). We don't strictly need it because of the
+// do { ... } while(0) scoping and because we never need the return value to 
live
+// outside the temporary scope. Here we define a suffix that is unlikely to 
collide
+// with anything in EXPR.
+#define _NANOARROW_UNIQUE_SUFFIX _nanoarrow_unique_suffix
+
 #define _NANOARROW_CHECK_RANGE(x_, min_, max_) \
   NANOARROW_RETURN_NOT_OK((x_ >= min_ && x_ <= max_) ? NANOARROW_OK : EINVAL)
 
@@ -266,7 +273,8 @@ static inline void ArrowErrorSetString(struct ArrowError* 
error, const char* src
 /// \brief Check the result of an expression and return it if not NANOARROW_OK
 /// \ingroup nanoarrow-errors
 #define NANOARROW_RETURN_NOT_OK(EXPR) \
-  _NANOARROW_RETURN_NOT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_, 
__COUNTER__), EXPR)
+  _NANOARROW_RETURN_NOT_OK_IMPL(      \
+      _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR)
 
 /// \brief Check the result of an expression and return it if not NANOARROW_OK,
 /// adding an auto-generated message to an ArrowError.
@@ -275,9 +283,10 @@ static inline void ArrowErrorSetString(struct ArrowError* 
error, const char* src
 /// This macro is used to ensure that functions that accept an ArrowError
 /// as input always set its message when returning an error code (e.g., when 
calling
 /// a nanoarrow function that does *not* accept ArrowError).
-#define NANOARROW_RETURN_NOT_OK_WITH_ERROR(EXPR, ERROR_EXPR) \
-  _NANOARROW_RETURN_NOT_OK_WITH_ERROR_IMPL(                  \
-      _NANOARROW_MAKE_NAME(errno_status_, __COUNTER__), EXPR, ERROR_EXPR, 
#EXPR)
+#define NANOARROW_RETURN_NOT_OK_WITH_ERROR(EXPR, ERROR_EXPR)                   
        \
+  _NANOARROW_RETURN_NOT_OK_WITH_ERROR_IMPL(                                    
        \
+      _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR, 
ERROR_EXPR, \
+      #EXPR)
 
 #if defined(NANOARROW_DEBUG) && !defined(NANOARROW_PRINT_AND_DIE)
 #define NANOARROW_PRINT_AND_DIE(VALUE, EXPR_STR)                               
  \
@@ -304,7 +313,8 @@ static inline void ArrowErrorSetString(struct ArrowError* 
error, const char* src
 /// be defining the NANOARROW_PRINT_AND_DIE macro before including nanoarrow.h
 /// This macro is provided as a convenience for users and is not used 
internally.
 #define NANOARROW_ASSERT_OK(EXPR) \
-  _NANOARROW_ASSERT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_, __COUNTER__), 
EXPR, #EXPR)
+  _NANOARROW_ASSERT_OK_IMPL(      \
+      _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR, 
#EXPR)
 
 #define _NANOARROW_DCHECK_IMPL(EXPR, EXPR_STR)          \
   do {                                                  \
diff --git a/src/nanoarrow/device/cuda.c b/src/nanoarrow/device/cuda.c
index 15209371..da60116f 100644
--- a/src/nanoarrow/device/cuda.c
+++ b/src/nanoarrow/device/cuda.c
@@ -53,9 +53,9 @@ static inline void ArrowDeviceCudaSetError(CUresult err, 
const char* op,
     }                                                             \
   } while (0)
 
-#define NANOARROW_CUDA_RETURN_NOT_OK(EXPR, OP, ERROR)                          
          \
-  _NANOARROW_CUDA_RETURN_NOT_OK_IMPL(_NANOARROW_MAKE_NAME(cuda_err_, 
__COUNTER__), EXPR, \
-                                     OP, ERROR)
+#define NANOARROW_CUDA_RETURN_NOT_OK(EXPR, OP, ERROR) \
+  _NANOARROW_CUDA_RETURN_NOT_OK_IMPL(                 \
+      _NANOARROW_MAKE_NAME(cuda_err_, _NANOARROW_UNIQUE_SUFFIX), EXPR, OP, 
ERROR)
 
 #if defined(NANOARROW_DEBUG)
 #define _NANOARROW_CUDA_ASSERT_OK_IMPL(NAME, EXPR, EXPR_STR)           \
@@ -63,9 +63,9 @@ static inline void ArrowDeviceCudaSetError(CUresult err, 
const char* op,
     const CUresult NAME = (EXPR);                                      \
     if (NAME != CUDA_SUCCESS) NANOARROW_PRINT_AND_DIE(NAME, EXPR_STR); \
   } while (0)
-#define NANOARROW_CUDA_ASSERT_OK(EXPR)                                         
          \
-  _NANOARROW_CUDA_ASSERT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_, 
__COUNTER__), EXPR, \
-                                 #EXPR)
+#define NANOARROW_CUDA_ASSERT_OK(EXPR) \
+  _NANOARROW_CUDA_ASSERT_OK_IMPL(      \
+      _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR, 
#EXPR)
 #else
 #define NANOARROW_CUDA_ASSERT_OK(EXPR) (void)(EXPR)
 #endif
diff --git a/src/nanoarrow/hpp/exception.hpp b/src/nanoarrow/hpp/exception.hpp
index dd00ec74..4f89299e 100644
--- a/src/nanoarrow/hpp/exception.hpp
+++ b/src/nanoarrow/hpp/exception.hpp
@@ -68,9 +68,9 @@ class Exception : public std::exception {
   } while (0)
 #endif
 
-#define NANOARROW_THROW_NOT_OK(EXPR)                                           
        \
-  _NANOARROW_THROW_NOT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_, 
__COUNTER__), EXPR, \
-                               #EXPR)
+#define NANOARROW_THROW_NOT_OK(EXPR) \
+  _NANOARROW_THROW_NOT_OK_IMPL(      \
+      _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR, 
#EXPR)
 
 /// @}
 

Reply via email to