| 74 | } // namespace |
| 75 | |
| 76 | absl::StatusOr<int64_t> CheckedAdd(int64_t x, int64_t y) { |
| 77 | #if ABSL_HAVE_BUILTIN(__builtin_add_overflow) |
| 78 | int64_t sum; |
| 79 | if (!__builtin_add_overflow(x, y, &sum)) { |
| 80 | return sum; |
| 81 | } |
| 82 | return absl::OutOfRangeError("integer overflow"); |
| 83 | #else |
| 84 | CEL_RETURN_IF_ERROR(CheckRange( |
| 85 | y > 0 ? x <= kInt64Max - y : x >= kInt64Min - y, "integer overflow")); |
| 86 | return x + y; |
| 87 | #endif |
| 88 | } |
| 89 | |
| 90 | absl::StatusOr<int64_t> CheckedSub(int64_t x, int64_t y) { |
| 91 | #if ABSL_HAVE_BUILTIN(__builtin_sub_overflow) |
no test coverage detected