folly: attribute-aligned-arg must now be constant (not enum)
authorJim Meyering <meyering@fb.com>
Tue, 13 Aug 2013 16:31:45 +0000 (09:31 -0700)
committerSara Golemon <sgolemon@fb.com>
Wed, 28 Aug 2013 21:30:11 +0000 (14:30 -0700)
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

folly/MPMCQueue.h

index b4cdee186810827c31dd5252cfa82e16fb8a7864..fef1730e3bf1ffddf4a91bc9a0edb7e94f06ab7b 100644 (file)
@@ -335,7 +335,13 @@ class MPMCQueue : boost::noncopyable {
         (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;