Skip to content

Commit 835f3b4

Browse files
committed
fix: avoid warnings on MSVC
Warnings in header files can be a problem for consumers that enable `/WX` (or `-Werror`). In this case, using `... & -align` produces a warning (C4146) with MSVC. The fix is to use equivalent expression `... & ~(align - 1)`, which was already used in the same file.
1 parent da2c4a6 commit 835f3b4

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/google/protobuf/arena_align.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ struct ArenaAlignDefault {
9999
}
100100

101101
static inline PROTOBUF_ALWAYS_INLINE constexpr size_t Ceil(size_t n) {
102-
return (n + align - 1) & -align;
102+
return (n + align - 1) & ~(align - 1);
103103
}
104104
static inline PROTOBUF_ALWAYS_INLINE constexpr size_t Floor(size_t n) {
105105
return (n & ~(align - 1));
@@ -113,7 +113,7 @@ struct ArenaAlignDefault {
113113
template <typename T>
114114
static inline PROTOBUF_ALWAYS_INLINE T* Ceil(T* ptr) {
115115
uintptr_t intptr = reinterpret_cast<uintptr_t>(ptr);
116-
return reinterpret_cast<T*>((intptr + align - 1) & -align);
116+
return reinterpret_cast<T*>((intptr + align - 1) & ~(align - 1));
117117
}
118118

119119
template <typename T>
@@ -142,7 +142,7 @@ struct ArenaAlign {
142142
return (reinterpret_cast<uintptr_t>(ptr) & (align - 1)) == 0U;
143143
}
144144

145-
constexpr size_t Ceil(size_t n) const { return (n + align - 1) & -align; }
145+
constexpr size_t Ceil(size_t n) const { return (n + align - 1) & ~(align - 1); }
146146
constexpr size_t Floor(size_t n) const { return (n & ~(align - 1)); }
147147

148148
constexpr size_t Padded(size_t n) const {
@@ -156,7 +156,7 @@ struct ArenaAlign {
156156
template <typename T>
157157
T* Ceil(T* ptr) const {
158158
uintptr_t intptr = reinterpret_cast<uintptr_t>(ptr);
159-
return reinterpret_cast<T*>((intptr + align - 1) & -align);
159+
return reinterpret_cast<T*>((intptr + align - 1) & ~(align - 1));
160160
}
161161

162162
template <typename T>

0 commit comments

Comments
 (0)