Summary:
With gcc-4.8.[01], the argument to __attribute__((__aligned__(...)))
must be a literal; using an enum member evokes this:
./folly/MPMCQueue.h:341:63: error: requested alignment is not an \
integer constant
size_t capacity_ FOLLY_ON_NEXT_CACHE_LINE;
Changing the enum member to this made no difference:
static constexpr size_t kFalseSharingRange = 64;
Test Plan: compile tao and run test suite
Reviewed By: andrei.alexandrescu@fb.com
FB internal diff:
D926221
@override-unit-failures
(kFalseSharingRange - 1) / sizeof(detail::SingleElementQueue<T,Atom>)
};
-#define FOLLY_ON_NEXT_CACHE_LINE __attribute__((aligned(kFalseSharingRange)))
+ static_assert(kFalseSharingRange == 64,
+ "FOLLY_ON_NEXT_CACHE_LINE must track kFalseSharingRange");
+
+// This literal "64' should be kFalseSharingRange,
+// but gcc-4.8.0 and 4.8.1 reject it.
+// FIXME: s/64/kFalseSharingRange/ if that ever changes.
+#define FOLLY_ON_NEXT_CACHE_LINE __attribute__((aligned(64)))
/// The maximum number of items in the queue at once
size_t capacity_ FOLLY_ON_NEXT_CACHE_LINE;