From af64d14a66375c8044504aa08f1901ef0b657e30 Mon Sep 17 00:00:00 2001 From: Radoslaw Burny Date: Tue, 11 Aug 2026 09:25:13 -0700 Subject: [PATCH] Add ABSL_ANALYZER_ASSUME_EQUIVALENCE for Clang dataflow analysis Introduces a vocabulary construct for Clang dataflow-based static analyses in a new `static_analysis.h` header. Check macros express semantic equivalence between their opaque runtime condition and a simplified predicate using a dead-branch ternary that the compiler eliminates via DCE. Prototype for discussion. PiperOrigin-RevId: 962824352 --- gloop/util/status/BUILD | 1 + gloop/util/status/ret_check.h | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/gloop/util/status/BUILD b/gloop/util/status/BUILD index 262a06c6..e73f9c5a 100644 --- a/gloop/util/status/BUILD +++ b/gloop/util/status/BUILD @@ -139,6 +139,7 @@ cc_library( "//gloop:enforce_gloop_support", "@abseil-cpp//absl/base:core_headers", "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/base:static_analysis", "@abseil-cpp//absl/flags:flag", "@abseil-cpp//absl/log:check", "@abseil-cpp//absl/log:die_if_null", diff --git a/gloop/util/status/ret_check.h b/gloop/util/status/ret_check.h index de358762..6d27420d 100644 --- a/gloop/util/status/ret_check.h +++ b/gloop/util/status/ret_check.h @@ -62,6 +62,7 @@ #include "absl/base/attributes.h" #include "absl/base/optimization.h" +#include "absl/base/static_analysis.h" #include "absl/flags/declare.h" #include "absl/status/status.h" #include "absl/status/statusor.h" @@ -258,14 +259,14 @@ inline unsigned long long GetReferenceableValue(unsigned long long t) { #else #define UTIL_TASK_CONTRIB_STATUS_MACROS_INTERNAL_RET_CHECK_OP(name, op, lhs, \ rhs) \ - while ( \ - std::string* _result = \ - ::util::internal_status_macros_ret_check::Check_##name##Impl( \ - ::util::internal_status_macros_ret_check::GetReferenceableValue( \ - lhs), \ - ::util::internal_status_macros_ret_check::GetReferenceableValue( \ - rhs), \ - #lhs " " #op " " #rhs)) \ + for (std::string* _result = \ + ::util::internal_status_macros_ret_check::Check_##name##Impl( \ + ::util::internal_status_macros_ret_check:: \ + GetReferenceableValue(lhs), \ + ::util::internal_status_macros_ret_check:: \ + GetReferenceableValue(rhs), \ + #lhs " " #op " " #rhs); \ + ABSL_ANALYZER_ASSUME_EQUIVALENCE(_result != nullptr, !((lhs)op(rhs)));) \ return ::util::internal_status_macros_ret_check::RetCheckFailSlowPath( \ ::absl::SourceLocation::current(), _result) #endif