Laszlo Ersek
63417f6a57
utils/small_vector: refactor expansion condition in reserve*()
...
Rewrite
_begin + n > _capacity_end
as
n > _capacity_end - _begin
and then as
n > capacity()
for two reasons:
- The last form is easier to read than the first form.
- Per N4950 (the final C++23 working draft), [expr.add] paragraph 4, the
expression
_begin + n (i.e., P + J)
is defined only if
0 ≤ 0 + n ≤ _capacity_end - _begin (i.e., 0 ≤ i + j ≤ n)
equivalently, only if
_begin ≤ _begin + n ≤ _capacity_end
Therefore, the expression
_begin + n
invokes undefined behavior exactly when we'd expect our check
_begin + n > _capacity_end
to evaluate to true.
gcc and clang have been aggressively equating undefined behavior to "never
happens"; let's prevent that here.
Signed-off-by: Laszlo Ersek <laszlo.ersek@scylladb.com >
Closes scylladb/scylladb#21213
2024-10-22 17:12:11 +03:00
..
2024-10-08 12:03:30 +03:00
2024-10-22 06:54:46 +03:00
2024-07-08 16:08:27 +02:00
2024-01-18 12:50:06 +02:00
2024-10-01 14:02:50 +03:00
2023-12-02 22:37:22 +02:00
2024-08-05 08:23:35 +03:00
2024-09-11 23:21:40 +03:00
2024-10-01 14:02:50 +03:00
2024-01-18 12:50:06 +02:00
2024-09-11 23:21:40 +03:00
2024-04-19 07:44:07 +03:00
2023-12-12 21:09:51 +08:00
2024-08-05 08:23:35 +03:00
2024-06-24 12:06:01 +05:30
2024-06-24 12:06:01 +05:30
2024-08-05 08:23:35 +03:00
2024-08-05 08:23:35 +03:00
2024-10-04 17:39:38 +02:00
2024-10-07 21:11:23 +03:00
2024-10-07 21:16:03 +03:00
2024-10-18 08:36:52 +08:00
2024-08-05 08:23:35 +03:00
2024-08-05 08:23:35 +03:00
2024-07-18 18:38:22 +03:00
2024-10-08 12:03:15 +03:00
2024-09-25 15:45:42 +03:00
2024-09-27 01:24:54 +02:00
2024-01-18 12:50:06 +02:00
2024-10-07 21:19:14 +03:00
2024-08-05 08:23:35 +03:00
2024-10-21 11:21:52 +03:00
2024-05-18 00:24:00 +03:00
2024-05-18 00:24:00 +03:00
2024-09-30 12:07:15 +08:00
2024-02-01 12:20:23 +05:30
2024-08-11 13:52:35 +03:00
2024-05-26 16:45:42 +03:00
2024-08-04 15:32:01 +03:00
2024-08-05 08:23:35 +03:00
2024-08-05 08:23:35 +03:00
2024-07-10 20:39:01 +03:00
2024-10-07 21:28:36 +03:00
2024-08-05 08:23:35 +03:00
2024-04-19 07:44:07 +03:00
2024-01-18 12:50:06 +02:00
2024-02-01 14:50:17 +02:00
2024-05-26 16:45:42 +03:00
2024-08-05 08:23:35 +03:00
2024-02-02 15:20:40 +01:00
2024-08-05 08:23:35 +03:00
2024-10-07 21:32:16 +03:00
2024-09-27 01:24:54 +02:00
2024-10-07 10:55:48 +03:00
2024-05-27 17:34:38 +03:00
2024-01-23 13:12:34 +02:00
2024-08-22 23:34:24 +03:00
2024-10-22 06:54:46 +03:00
2024-03-12 14:53:55 +08:00
2024-04-19 07:44:07 +03:00
2024-10-22 06:54:46 +03:00
2024-10-07 10:55:48 +03:00
2024-08-05 08:23:35 +03:00
2024-10-07 17:26:01 +03:00
2024-08-05 08:23:35 +03:00
2024-08-05 08:23:35 +03:00
2024-09-11 23:21:40 +03:00
2024-10-01 14:02:50 +03:00
2024-10-22 06:54:46 +03:00
2024-08-05 08:23:35 +03:00
2024-10-22 06:54:46 +03:00
2024-10-22 06:54:46 +03:00
2024-08-05 08:23:35 +03:00
2024-08-05 08:23:35 +03:00
2024-02-23 11:32:41 +08:00
2024-04-19 22:56:13 +08:00
2023-11-20 23:02:41 +02:00
2024-07-04 10:07:48 +03:00
2023-12-02 22:37:22 +02:00
2024-06-24 08:24:43 +03:00
2024-10-01 14:02:50 +03:00
2024-02-09 17:00:33 +01:00
2024-10-07 21:11:07 +03:00
2024-01-31 16:45:09 +02:00
2024-08-05 08:23:35 +03:00
2024-02-07 18:31:28 +01:00
2024-08-05 08:23:35 +03:00
2024-01-31 09:16:10 +02:00
2023-12-02 22:37:22 +02:00
2024-02-02 22:12:57 +08:00
2024-08-05 08:23:35 +03:00
2024-08-05 08:23:35 +03:00
2024-09-12 15:22:49 +03:00
2024-10-06 12:47:51 +03:00
2024-10-01 14:02:50 +03:00
2024-10-22 17:12:11 +03:00
2024-08-08 10:42:09 +02:00
2024-06-18 23:36:30 +05:30
2024-08-15 02:12:58 +02:00
2024-08-05 08:23:35 +03:00
2024-08-19 17:20:12 +03:00
2024-04-23 12:09:05 +03:00
2024-08-05 08:23:35 +03:00
2024-10-07 17:30:12 +03:00
2023-12-02 22:37:22 +02:00
2024-08-19 17:20:12 +03:00
2023-12-02 22:37:22 +02:00
2024-04-30 09:07:22 +03:00
2024-08-05 08:23:35 +03:00
2024-09-11 23:21:40 +03:00
2024-08-05 08:23:35 +03:00
2024-08-13 10:02:43 +02:00
2024-10-01 14:02:50 +03:00
2024-05-18 00:24:00 +03:00