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:
parent
7395a90db8
commit
39055cb4cc
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user