summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Derek Mauro <761129+derekmauro@users.noreply.github.com>2023-02-18 11:23:34 -0500
committerGravatar GitHub <noreply@github.com>2023-02-18 11:23:34 -0500
commitc8a2f92586fe9b4e1aff049108f5db8064924d8e (patch)
treeb09ad1431986a4dfe011567200ad7abbcef6e344
parent78be63686ba732b25052be15f8d6dee891c05749 (diff)
Make `SanitizerSafeCopy()` constexpr, and check for constant evaluation (#1399)20230125.1
Also update test Docker container so that LTS patches can be tested This patch cherry-picks 2 commits: a0f9b465212aea24d3264b82d315b8ee59e8d7a0 35e8e3f7a2c6972d4c591448e8bbe4f9ed9f815a
-rw-r--r--absl/base/config.h2
-rw-r--r--absl/strings/internal/cord_internal.h20
-rw-r--r--ci/linux_docker_containers.sh4
3 files changed, 15 insertions, 11 deletions
diff --git a/absl/base/config.h b/absl/base/config.h
index e35d2e48..573c9fd7 100644
--- a/absl/base/config.h
+++ b/absl/base/config.h
@@ -112,7 +112,7 @@
// LTS releases can be obtained from
// https://github.com/abseil/abseil-cpp/releases.
#define ABSL_LTS_RELEASE_VERSION 20230125
-#define ABSL_LTS_RELEASE_PATCH_LEVEL 0
+#define ABSL_LTS_RELEASE_PATCH_LEVEL 1
// Helper macro to convert a CPP variable to a string literal.
#define ABSL_INTERNAL_DO_TOKEN_STR(x) #x
diff --git a/absl/strings/internal/cord_internal.h b/absl/strings/internal/cord_internal.h
index 63a81f4f..e6f0d544 100644
--- a/absl/strings/internal/cord_internal.h
+++ b/absl/strings/internal/cord_internal.h
@@ -768,18 +768,22 @@ class InlineData {
}
#ifdef ABSL_INTERNAL_CORD_HAVE_SANITIZER
- Rep SanitizerSafeCopy() const {
- Rep res;
- if (is_tree()) {
- res = *this;
+ constexpr Rep SanitizerSafeCopy() const {
+ if (!absl::is_constant_evaluated()) {
+ Rep res;
+ if (is_tree()) {
+ res = *this;
+ } else {
+ res.set_tag(tag());
+ memcpy(res.as_chars(), as_chars(), inline_size());
+ }
+ return res;
} else {
- res.set_tag(tag());
- memcpy(res.as_chars(), as_chars(), inline_size());
+ return *this;
}
- return res;
}
#else
- const Rep& SanitizerSafeCopy() const { return *this; }
+ constexpr const Rep& SanitizerSafeCopy() const { return *this; }
#endif
// If the data has length <= kMaxInline, we store it in `data`, and
diff --git a/ci/linux_docker_containers.sh b/ci/linux_docker_containers.sh
index 1dd8b74a..dcaf18b9 100644
--- a/ci/linux_docker_containers.sh
+++ b/ci/linux_docker_containers.sh
@@ -16,6 +16,6 @@
# Test scripts should source this file to get the identifiers.
readonly LINUX_ALPINE_CONTAINER="gcr.io/google.com/absl-177019/alpine:20201026"
-readonly LINUX_CLANG_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20220217"
-readonly LINUX_GCC_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20220217"
+readonly LINUX_CLANG_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20230217"
+readonly LINUX_GCC_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20230217"
readonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20230120"