Improve handling of INT_MIN / -1 and related cases.
Some platforms throw an exception for this division, rather than returning a necessarily-overflowed result. Since we were testing for overflow after the fact, an exception isn't nice. We can avoid the problem by treating division by -1 as negation. Add some regression tests so that we'll find out if any compilers try to optimize away the overflow check conditions. Back-patch of commit 1f7cb5c3. Per discussion with Xi Wang, though this is different from the patch he submitted.
Showing
- src/backend/utils/adt/int.c 56 additions, 52 deletionssrc/backend/utils/adt/int.c
- src/backend/utils/adt/int8.c 59 additions, 31 deletionssrc/backend/utils/adt/int8.c
- src/test/regress/expected/int2.out 11 additions, 0 deletionssrc/test/regress/expected/int2.out
- src/test/regress/expected/int4.out 21 additions, 0 deletionssrc/test/regress/expected/int4.out
- src/test/regress/expected/int8-exp-three-digits.out 31 additions, 0 deletionssrc/test/regress/expected/int8-exp-three-digits.out
- src/test/regress/expected/int8.out 31 additions, 0 deletionssrc/test/regress/expected/int8.out
- src/test/regress/sql/int2.sql 5 additions, 0 deletionssrc/test/regress/sql/int2.sql
- src/test/regress/sql/int4.sql 8 additions, 0 deletionssrc/test/regress/sql/int4.sql
- src/test/regress/sql/int8.sql 11 additions, 0 deletionssrc/test/regress/sql/int8.sql
Loading
Please register or sign in to comment