pgsql: Remove dependence on -fwrapv semantics in a few places.
От | Nathan Bossart |
---|---|
Тема | pgsql: Remove dependence on -fwrapv semantics in a few places. |
Дата | |
Msg-id | E1sehPA-004Kec-Ub@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Remove dependence on -fwrapv semantics in a few places. This commit attempts to update a few places, such as the money, numeric, and timestamp types, to no longer rely on signed integer wrapping for correctness. This is intended to move us closer towards removing -fwrapv, which may enable some compiler optimizations. However, there is presently no plan to actually remove that compiler option in the near future. Besides using some of the existing overflow-aware routines in int.h, this commit introduces and makes use of some new ones. Specifically, it adds functions that accept a signed integer and return its absolute value as an unsigned integer with the same width (e.g., pg_abs_s64()). It also adds functions that accept an unsigned integer, store the result of negating that integer in a signed integer with the same width, and return whether the negation overflowed (e.g., pg_neg_u64_overflow()). Finally, this commit adds a couple of tests for timestamps near POSTGRES_EPOCH_JDATE. Author: Joseph Koshakow Reviewed-by: Tom Lane, Heikki Linnakangas, Jian He Discussion: https://postgr.es/m/CAAvxfHdBPOyEGS7s%2Bxf4iaW0-cgiq25jpYdWBqQqvLtLe_t6tw%40mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/9e9a2b7031f64e49fcaf28f21a4e70eb1212165f Modified Files -------------- src/backend/utils/adt/cash.c | 12 +-- src/backend/utils/adt/numeric.c | 4 +- src/backend/utils/adt/numutils.c | 34 ++++---- src/backend/utils/adt/timestamp.c | 28 +----- src/include/common/int.h | 131 +++++++++++++++++++++++++++-- src/interfaces/ecpg/pgtypeslib/timestamp.c | 11 +-- src/test/regress/expected/timestamp.out | 13 +++ src/test/regress/expected/timestamptz.out | 13 +++ src/test/regress/sql/timestamp.sql | 4 + src/test/regress/sql/timestamptz.sql | 4 + 10 files changed, 189 insertions(+), 65 deletions(-)
В списке pgsql-committers по дате отправления: