| 88 | } |
| 89 | |
| 90 | absl::StatusOr<int64_t> CheckedSub(int64_t x, int64_t y) { |
| 91 | #if ABSL_HAVE_BUILTIN(__builtin_sub_overflow) |
| 92 | int64_t diff; |
| 93 | if (!__builtin_sub_overflow(x, y, &diff)) { |
| 94 | return diff; |
| 95 | } |
| 96 | return absl::OutOfRangeError("integer overflow"); |
| 97 | #else |
| 98 | CEL_RETURN_IF_ERROR(CheckRange( |
| 99 | y < 0 ? x <= kInt64Max + y : x >= kInt64Min + y, "integer overflow")); |
| 100 | return x - y; |
| 101 | #endif |
| 102 | } |
| 103 | |
| 104 | absl::StatusOr<int64_t> CheckedNegation(int64_t v) { |
| 105 | #if ABSL_HAVE_BUILTIN(__builtin_mul_overflow) |
no test coverage detected