git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7395a90)
Bring some MSVC asserts in line with other platforms
2023年7月31日 06:34:29 +0000 (13:34 +0700)
2023年7月31日 07:46:21 +0000 (14:46 +0700)
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


diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 21a4fa0341059c722be99a61665edeb5f23c7a8f..4f1a13dba939fdffb0fc96b574b37a1f95bdb2b0 100644 (file)
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -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;
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /