summaryrefslogtreecommitdiff
path: root/src/include/c.h
diff options
context:
space:
mode:
authorNoah Misch <noah@leadboat.com>2013-10-20 21:04:52 -0400
committerNoah Misch <noah@leadboat.com>2013-10-20 21:04:52 -0400
commit709170b790c11b4012004a6baf11a0fc6ec950de (patch)
tree5194f18a7586d5612e3eb2b2cce06e4ecaf316ca /src/include/c.h
parent713a9f210d5cf5d94cc420b01eef5183569402e0 (diff)
Consistently use unsigned arithmetic for alignment calculations.
This avoids an assumption about the signed number representation. It is anticipated to have no functional changes on supported configurations; many two's complement assumptions remain elsewhere. Per a suggestion from Andres Freund.
Diffstat (limited to 'src/include/c.h')
-rw-r--r--src/include/c.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/include/c.h b/src/include/c.h
index 8916310b5bf..6e19c6df878 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -486,7 +486,7 @@ typedef NameData *Name;
* True iff pointer is properly aligned to point to the given type.
*/
#define PointerIsAligned(pointer, type) \
- (((intptr_t)(pointer) % (sizeof (type))) == 0)
+ (((uintptr_t)(pointer) % (sizeof (type))) == 0)
#define OidIsValid(objectId) ((bool) ((objectId) != InvalidOid))
@@ -532,7 +532,7 @@ typedef NameData *Name;
*/
#define TYPEALIGN(ALIGNVAL,LEN) \
- (((intptr_t) (LEN) + ((ALIGNVAL) - 1)) & ~((intptr_t) ((ALIGNVAL) - 1)))
+ (((uintptr_t) (LEN) + ((ALIGNVAL) - 1)) & ~((uintptr_t) ((ALIGNVAL) - 1)))
#define SHORTALIGN(LEN) TYPEALIGN(ALIGNOF_SHORT, (LEN))
#define INTALIGN(LEN) TYPEALIGN(ALIGNOF_INT, (LEN))
@@ -543,7 +543,7 @@ typedef NameData *Name;
#define BUFFERALIGN(LEN) TYPEALIGN(ALIGNOF_BUFFER, (LEN))
#define TYPEALIGN_DOWN(ALIGNVAL,LEN) \
- (((intptr_t) (LEN)) & ~((intptr_t) ((ALIGNVAL) - 1)))
+ (((uintptr_t) (LEN)) & ~((uintptr_t) ((ALIGNVAL) - 1)))
#define SHORTALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_SHORT, (LEN))
#define INTALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_INT, (LEN))
@@ -552,7 +552,7 @@ typedef NameData *Name;
#define MAXALIGN_DOWN(LEN) TYPEALIGN_DOWN(MAXIMUM_ALIGNOF, (LEN))
/*
- * The above macros will not work with types wider than intptr_t, like with
+ * The above macros will not work with types wider than uintptr_t, like with
* uint64 on 32-bit platforms. That's not problem for the usual use where a
* pointer or a length is aligned, but for the odd case that you need to
* align something (potentially) wider, use TYPEALIGN64.
@@ -763,7 +763,7 @@ typedef NameData *Name;
int _val = (val); \
Size _len = (len); \
\
- if ((((intptr_t) _vstart) & LONG_ALIGN_MASK) == 0 && \
+ if ((((uintptr_t) _vstart) & LONG_ALIGN_MASK) == 0 && \
(_len & LONG_ALIGN_MASK) == 0 && \
_val == 0 && \
_len <= MEMSET_LOOP_LIMIT && \