Skip to content

Commit b880933

Browse files
coryanfowles
authored andcommitted
fix: avoid warnings on MSVC (#12697)
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. Fixes #12675 Closes #12697 COPYBARA_INTEGRATE_REVIEW=#12697 from coryan:fix-msvc-warnings-in-arena-align 835f3b4 PiperOrigin-RevId: 530137165
1 parent fe1277f commit b880933

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/google/protobuf/arena_align.h

Lines changed: 6 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,9 @@ 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 {
146+
return (n + align - 1) & ~(align - 1);
147+
}
146148
constexpr size_t Floor(size_t n) const { return (n & ~(align - 1)); }
147149

148150
constexpr size_t Padded(size_t n) const {
@@ -156,7 +158,7 @@ struct ArenaAlign {
156158
template <typename T>
157159
T* Ceil(T* ptr) const {
158160
uintptr_t intptr = reinterpret_cast<uintptr_t>(ptr);
159-
return reinterpret_cast<T*>((intptr + align - 1) & -align);
161+
return reinterpret_cast<T*>((intptr + align - 1) & ~(align - 1));
160162
}
161163

162164
template <typename T>

0 commit comments

Comments
 (0)