From 54502fe14da1f992215c87484722cf5adc5ba414 Mon Sep 17 00:00:00 2001 From: Justin King Date: Wed, 10 Jun 2026 09:59:25 -0700 Subject: [PATCH] Workaround C++ bug taking a reference to packed field PiperOrigin-RevId: 929919608 --- cel-c/duration.h | 9 +++++++++ cel-c/src/BUILD | 1 + cel-c/src/runtime_test.cc | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cel-c/duration.h b/cel-c/duration.h index ce03946..ac07980 100644 --- a/cel-c/duration.h +++ b/cel-c/duration.h @@ -121,6 +121,15 @@ static CEL_INLINE void cel_Duration_ToUnix(cel_Duration d, } } +// cel_Duration_ToUnixSeconds +// +// Returns the seconds part of the cel_Duration. +CEL_ATTRIBUTE_NODISCARD +static CEL_INLINE int64_t cel_Duration_ToUnixSeconds(cel_Duration d) { + CEL_ASSERT(cel_Duration_Valid(d.sec, d.nsec)); + return d.sec; +} + // cel_Duration_Equals // // Tests the two durations for equality. diff --git a/cel-c/src/BUILD b/cel-c/src/BUILD index 13222ee..2756240 100644 --- a/cel-c/src/BUILD +++ b/cel-c/src/BUILD @@ -739,6 +739,7 @@ cc_test( "//cel-c:arena", "//cel-c:ast", "//cel-c:config", + "//cel-c:duration", "//cel-c:error", "//cel-c:error_code", "//cel-c:runtime", diff --git a/cel-c/src/runtime_test.cc b/cel-c/src/runtime_test.cc index cf71284..fe34146 100644 --- a/cel-c/src/runtime_test.cc +++ b/cel-c/src/runtime_test.cc @@ -33,6 +33,7 @@ #include "cel-c/arena.h" #include "cel-c/ast.h" #include "cel-c/config.h" +#include "cel-c/duration.h" #include "cel-c/error.h" #include "cel-c/error_code.h" #include "cel-c/program.h" @@ -796,7 +797,7 @@ TEST_F(RuntimeTest, CallDuration) { _cel_ActivationPtr act(Activate(prog.get(), &var_resolver)); cel_Value value = Execute(act.get()); ASSERT_TRUE(cel_Value_IsDuration(&value)); - EXPECT_EQ(cel_Value_GetDuration(&value).sec, 3600); + EXPECT_EQ(cel_Duration_ToUnixSeconds(cel_Value_GetDuration(&value)), 3600); prog = Parse(R"cel(duration("invalid"))cel"); act = Activate(prog.get(), &var_resolver);