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

thisisnic pushed a commit to branch maint-23.0.0-r
in repository https://gitbox.apache.org/repos/asf/arrow.git

commit 3f76710f8df1e3de4ae7db0e4b2b4054ae0a71cd
Author: Jonathan Keane <[email protected]>
AuthorDate: Wed Jan 14 16:20:27 2026 -0600

    GH-48817 [R][C++] Bump C++20 in R build infrastructure (#48819)
    
    Resolves: #48817
    
    ### Rationale for this change
    Keep R build infrastructure inline with our C++ version
    
    ### What changes are included in this PR?
    Mostly `s/CXX17/CXX20/g`
    
    ### Are these changes tested?
    Yes, lots of CI
    
    ### Are there any user-facing changes?
    
    **This PR includes breaking changes to public APIs.** (If there are any 
breaking changes to public APIs, please explain which changes are breaking. If 
not, you can remove this.)
    
    **This PR contains a "Critical Fix".** (If the changes fix either (a) a 
security vulnerability, (b) a bug that caused incorrect or invalid data to be 
produced, or (c) a bug that causes a crash (even when the API contract is 
upheld), please provide explanation. If not, you can remove this.)
    
    * GitHub Issue: #48817
    
    Authored-by: Jonathan Keane <[email protected]>
    Signed-off-by: Jonathan Keane <[email protected]>
---
 compose.yaml            |  4 ++--
 r/DESCRIPTION           |  2 +-
 r/README.md             |  2 +-
 r/configure             | 22 +++++++---------------
 r/configure.win         |  8 --------
 r/src/Makevars.in       |  2 +-
 r/src/Makevars.ucrt     |  2 +-
 r/src/compute.cpp       |  9 +++++----
 r/tools/nixlibs.R       | 13 ++++++++-----
 r/vignettes/install.Rmd |  4 ++--
 10 files changed, 28 insertions(+), 40 deletions(-)

diff --git a/compose.yaml b/compose.yaml
index 84481e1af7..2bd38a381e 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -1718,9 +1718,9 @@ services:
       cache_from:
         - ${REPO}:amd64-ubuntu-r-valgrind
       args:
-        base: wch1/r-debug:latest
+        base: rhub/valgrind:latest
         cmake: ${CMAKE}
-        r_bin: RDvalgrind
+        r_bin: R
         tz: ${TZ}
     environment:
       <<: [*common, *ccache, *sccache]
diff --git a/r/DESCRIPTION b/r/DESCRIPTION
index 0ac5e36ea6..3252e960c3 100644
--- a/r/DESCRIPTION
+++ b/r/DESCRIPTION
@@ -28,7 +28,7 @@ URL: https://github.com/apache/arrow/, 
https://arrow.apache.org/docs/r/
 BugReports: https://github.com/apache/arrow/issues
 Encoding: UTF-8
 Language: en-US
-SystemRequirements: C++17; for AWS S3 support on Linux, libcurl and openssl 
(optional);
+SystemRequirements: C++20; for AWS S3 support on Linux, libcurl and openssl 
(optional);
     cmake >= 3.26 (build-time only, and only for full source build)
 Biarch: true
 Imports:
diff --git a/r/README.md b/r/README.md
index 1ab9206f11..bb5d137dc8 100644
--- a/r/README.md
+++ b/r/README.md
@@ -44,7 +44,7 @@ There are some special cases to note:
 
 - On Linux the installation process can sometimes be more involved because 
CRAN does not host binaries for Linux. For more information please see the 
[installation guide](https://arrow.apache.org/docs/r/articles/install.html).
 
-- If you are compiling arrow from source, please note that as of version 
10.0.0, arrow requires C++17 to build. This has implications on Windows and 
CentOS 7. For Windows users it means you need to be running an R version of 4.0 
or later. On CentOS 7, it means you need to install a newer compiler than the 
default system compiler gcc. See the [installation details 
article](https://arrow.apache.org/docs/r/articles/developers/install_details.html)
 for guidance.
+- If you are compiling arrow from source, please note that as of version 
23.0.0, arrow requires C++20 to build. This has implications on Windows and 
CentOS 7. For Windows users it means you need to be running an R version of 4.3 
or later (though R 4.2 has incomplete support and might work with special 
configuration). See the [installation details 
article](https://arrow.apache.org/docs/r/articles/developers/install_details.html)
 for guidance.
 
 - Development versions of arrow are released nightly. For information on how 
to install nightly builds please see the [installing nightly 
builds](https://arrow.apache.org/docs/r/articles/install_nightly.html) article.
 
diff --git a/r/configure b/r/configure
index f64a3673f9..9e92eb6b47 100755
--- a/r/configure
+++ b/r/configure
@@ -86,10 +86,10 @@ if [ "$ARROW_R_DEV" = "true" ] && [ -f "data-raw/codegen.R" 
]; then
   ${R_HOME}/bin/Rscript data-raw/codegen.R
 fi
 
-# Arrow requires C++17, so check for it
-if [ ! "`${R_HOME}/bin/R CMD config CXX17`" ]; then
+# Arrow requires C++20, so check for it
+if [ ! "`${R_HOME}/bin/R CMD config CXX20`" ]; then
   echo "------------------------- NOTE ---------------------------"
-  echo "Cannot install arrow: a C++17 compiler is required."
+  echo "Cannot install arrow: a C++20 compiler is required."
   echo "See https://arrow.apache.org/docs/r/articles/install.html";
   echo "---------------------------------------------------------"
   exit 1
@@ -260,14 +260,6 @@ set_pkg_vars () {
   if [ "$ARROW_R_CXXFLAGS" ]; then
     PKG_CFLAGS="$PKG_CFLAGS $ARROW_R_CXXFLAGS"
   fi
-
-  # We use expr because the product version returns more than just 10.13 and 
we want to
-  # match the substring. However, expr always outputs the number of matched 
characters
-  # to stdout, to avoid noise in the log we redirect the output to /dev/null
-  if [ "$UNAME" = "Darwin" ] && expr $(sw_vers -productVersion) : '10\.13' 
>/dev/null 2>&1; then
-    # avoid C++17 availability warnings on macOS < 11
-    PKG_CFLAGS="$PKG_CFLAGS -D_LIBCPP_DISABLE_AVAILABILITY"
-  fi
 }
 
 # If we have pkg-config, it will tell us what libarrow needs
@@ -408,11 +400,11 @@ else
 fi
 
 # Test that we can compile something with those flags
-CXX17="`${R_HOME}/bin/R CMD config CXX17` -E"
-CXX17FLAGS=`"${R_HOME}"/bin/R CMD config CXX17FLAGS`
-CXX17STD=`"${R_HOME}"/bin/R CMD config CXX17STD`
+CXX20="`${R_HOME}/bin/R CMD config CXX20` -E"
+CXX20FLAGS=`"${R_HOME}"/bin/R CMD config CXX20FLAGS`
+CXX20STD=`"${R_HOME}"/bin/R CMD config CXX20STD`
 CPPFLAGS=`"${R_HOME}"/bin/R CMD config CPPFLAGS`
-TEST_CMD="${CXX17} ${CPPFLAGS} ${PKG_CFLAGS} ${CXX17FLAGS} ${CXX17STD} -xc++ -"
+TEST_CMD="${CXX20} ${CPPFLAGS} ${PKG_CFLAGS} ${CXX20FLAGS} ${CXX20STD} -xc++ -"
 TEST_ERROR=$(echo "#include $PKG_TEST_HEADER" | ${TEST_CMD} -o /dev/null 2>&1)
 
 if [ $? -eq 0 ]; then
diff --git a/r/configure.win b/r/configure.win
index 433ef28439..16c5ec1bee 100755
--- a/r/configure.win
+++ b/r/configure.win
@@ -117,14 +117,6 @@ set_pkg_vars () {
   if [ "$ARROW_R_CXXFLAGS" ]; then
     PKG_CFLAGS="$PKG_CFLAGS $ARROW_R_CXXFLAGS"
   fi
-
-  # We use expr because the product version returns more than just 10.13 and 
we want to
-  # match the substring. However, expr always outputs the number of matched 
characters
-  # to stdout, to avoid noise in the log we redirect the output to /dev/null
-  if [ "$UNAME" = "Darwin" ] && expr $(sw_vers -productVersion) : '10\.13' 
>/dev/null 2>&1; then
-    # avoid C++17 availability warnings on macOS < 11
-    PKG_CFLAGS="$PKG_CFLAGS -D_LIBCPP_DISABLE_AVAILABILITY"
-  fi
 }
 
 # If we have pkg-config, it will tell us what libarrow needs
diff --git a/r/src/Makevars.in b/r/src/Makevars.in
index af0826faac..1b7ad08e1c 100644
--- a/r/src/Makevars.in
+++ b/r/src/Makevars.in
@@ -25,7 +25,7 @@ PKG_CPPFLAGS=@cflags@
 # https://bugs.llvm.org/show_bug.cgi?id=39191
 # https://www.mail-archive.com/[email protected]/msg534862.html
 # PKG_CXXFLAGS=$(CXX_VISIBILITY)
-CXX_STD=CXX17
+CXX_STD=CXX20
 PKG_LIBS=@libs@
 
 all: $(SHLIB) purify
diff --git a/r/src/Makevars.ucrt b/r/src/Makevars.ucrt
index a91dedc2d5..b72ed64d98 100644
--- a/r/src/Makevars.ucrt
+++ b/r/src/Makevars.ucrt
@@ -19,4 +19,4 @@ CRT=-ucrt
 include Makevars.win
 
 # XXX for some reason, this variable doesn't seem propagated from Makevars.win
-CXX_STD=CXX17
+CXX_STD=CXX20
diff --git a/r/src/compute.cpp b/r/src/compute.cpp
index 0777ca8bc7..c8aa903bf0 100644
--- a/r/src/compute.cpp
+++ b/r/src/compute.cpp
@@ -162,12 +162,13 @@ std::shared_ptr<arrow::compute::FunctionOptions> 
make_compute_options(
     // false means descending, true means ascending
     // cpp11 does not support bool here so use int
     auto orders = cpp11::as_cpp<std::vector<int>>(options["orders"]);
-    std::vector<Key> keys;
+    // Use resize + assignment to avoid vector growth operations that trigger
+    // false positive -Wmaybe-uninitialized warnings in GCC 14 with 
std::variant
+    std::vector<Key> keys(names.size(), Key("", Order::Ascending));
     for (size_t i = 0; i < names.size(); i++) {
-      keys.push_back(
-          Key(names[i], (orders[i] > 0) ? Order::Descending : 
Order::Ascending));
+      keys[i] = Key(names[i], (orders[i] > 0) ? Order::Descending : 
Order::Ascending);
     }
-    auto out = std::make_shared<Options>(Options(keys));
+    auto out = std::make_shared<Options>(std::move(keys));
     return out;
   }
 
diff --git a/r/tools/nixlibs.R b/r/tools/nixlibs.R
index 9d0a260468..f4ccb4956a 100644
--- a/r/tools/nixlibs.R
+++ b/r/tools/nixlibs.R
@@ -310,11 +310,11 @@ compile_test_program <- function(code) {
     openssl_dir <- paste0("-I", openssl_root_dir, "/include")
   }
   runner <- paste(
-    R_CMD_config("CXX17"),
+    R_CMD_config("CXX20"),
     openssl_dir,
     R_CMD_config("CPPFLAGS"),
-    R_CMD_config("CXX17FLAGS"),
-    R_CMD_config("CXX17STD"),
+    R_CMD_config("CXX20FLAGS"),
+    R_CMD_config("CXX20STD"),
     "-E",
     "-xc++"
   )
@@ -565,8 +565,11 @@ build_libarrow <- function(src_dir, dst_dir) {
     # is found, it will be used by the libarrow build, and this does
     # not affect how R compiles the arrow bindings.
     CC = sub("^.*ccache", "", R_CMD_config("CC")),
-    CXX = paste(sub("^.*ccache", "", R_CMD_config("CXX17")), 
R_CMD_config("CXX17STD")),
-    # CXXFLAGS = R_CMD_config("CXX17FLAGS"), # We don't want the same debug 
symbols
+    CXX = paste(
+      sub("^.*ccache", "", R_CMD_config("CXX20")),
+      R_CMD_config("CXX20STD")
+    ),
+    # CXXFLAGS = R_CMD_config("CXX20FLAGS"), # We don't want the same debug 
symbols
     LDFLAGS = R_CMD_config("LDFLAGS"),
     N_JOBS = ncores
   )
diff --git a/r/vignettes/install.Rmd b/r/vignettes/install.Rmd
index 69780bd64d..d9cdcc3885 100644
--- a/r/vignettes/install.Rmd
+++ b/r/vignettes/install.Rmd
@@ -23,8 +23,8 @@ but there are a few things to note.
 
 ### Compilers
 
-As of version 10.0.0, arrow requires a C++17 compiler to build.
-For `gcc`, this generally means version 7 or newer. Most contemporary Linux
+As of version 22.0.0, arrow requires a C++20 compiler to build.
+For `gcc`, this generally means version 10 or newer. Most contemporary Linux
 distributions have a new enough compiler; however, CentOS 7 is a notable
 exception, as it ships with gcc 4.8.
 

Reply via email to