1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-24 10:47:04 +03:00

Bring some MSVC asserts in line with other platforms

MSVC's _BitScan* functions return a boolean indicating whether any
bits were set in the input, and we were previously asserting that
they returned true, per our API. This is correct. However, other
platforms simply assert that the input is non-zero, so do that to be
more consistent.

Noted while investigating a hypothesis from Ranier Vilela about
undefined behavior, but this is not his proposed patch.

Discussion: https://www.postgresql.org/message-id/CAEudQAoDhUZyKGJ1vbMGcgVUOcsixe-%3DjcVaDWarqkUg163D2w%40mail.gmail.com
This commit is contained in:
John Naylor 2023-07-31 13:34:29 +07:00
parent 7395a90db8
commit 39055cb4cc

View File

@ -48,8 +48,9 @@ pg_leftmost_one_pos32(uint32 word)
unsigned long result;
bool non_zero;
Assert(word != 0);
non_zero = _BitScanReverse(&result, word);
Assert(non_zero);
return (int) result;
#else
int shift = 32 - 8;
@ -85,8 +86,9 @@ pg_leftmost_one_pos64(uint64 word)
unsigned long result;
bool non_zero;
Assert(word != 0);
non_zero = _BitScanReverse64(&result, word);
Assert(non_zero);
return (int) result;
#else
int shift = 64 - 8;
@ -116,8 +118,9 @@ pg_rightmost_one_pos32(uint32 word)
unsigned long result;
bool non_zero;
Assert(word != 0);
non_zero = _BitScanForward(&result, word);
Assert(non_zero);
return (int) result;
#else
int result = 0;
@ -156,8 +159,9 @@ pg_rightmost_one_pos64(uint64 word)
unsigned long result;
bool non_zero;
Assert(word != 0);
non_zero = _BitScanForward64(&result, word);
Assert(non_zero);
return (int) result;
#else
int result = 0;