Commit 8462db08 authored by Shoaib Meenai's avatar Shoaib Meenai Committed by Facebook Github Bot

Check CachelinePadded alignment requirement dynamically

Summary:
It's possible, but not required, for platforms to support alignment
requirements greater than std::max_align_t. For example, on some 32-bit
platforms (e.g. iPhone armv7), std::max_align_t is only 4, but
std::atomic<unsigned long long> has an alignment requirement of 8. Check
for alignment at runtime instead of compile time to avoid spurious
static assertion failures.

Reviewed By: nbronson

Differential Revision: D17488704

fbshipit-source-id: 54cd7c2d7aec4f7f93e5fa6d62f8237f66a6c018
parent fff74a54
main v2022.02.14.00 v2022.02.07.00 v2022.01.31.00 v2022.01.24.00 v2022.01.17.00 v2022.01.10.00 v2022.01.03.00 v2021.12.27.00 v2021.12.20.00 v2021.12.13.00 v2021.12.06.00 v2021.11.29.00 v2021.11.15.00 v2021.11.08.00 v2021.11.01.00 v2021.10.25.00 v2021.10.18.00 v2021.10.11.00 v2021.10.04.00 v2021.09.27.00 v2021.09.20.00 v2021.09.13.00 v2021.09.06.00 v2021.08.30.00 v2021.08.23.00 v2021.08.02.00 v2021.07.22.00 v2021.07.20.01 v2021.07.20.00 v2021.06.28.00 v2021.06.14.00 v2021.06.07.00 v2021.05.31.00 v2021.05.24.00 v2021.05.17.00 v2021.05.10.00 v2021.05.03.00 v2021.04.26.00 v2021.04.19.00 v2021.04.12.00 v2021.04.05.00 v2021.03.29.00 v2021.03.22.00 v2021.03.15.00 v2021.03.08.00 v2021.03.01.00 v2021.02.22.00 v2021.02.15.00 v2021.02.08.00 v2021.02.01.00 v2021.01.25.00 v2021.01.18.01 v2021.01.18.00 v2021.01.11.00 v2021.01.04.00 v2020.12.28.00 v2020.12.21.00 v2020.12.14.00 v2020.12.07.00 v2020.11.30.00 v2020.11.23.00 v2020.11.16.00 v2020.11.09.00 v2020.11.02.00 v2020.10.26.00 v2020.10.19.00 v2020.10.12.00 v2020.10.05.00 v2020.09.28.00 v2020.09.21.00 v2020.09.14.00 v2020.09.07.00 v2020.08.31.00 v2020.08.24.00 v2020.08.17.00 v2020.08.10.00 v2020.08.03.00 v2020.07.27.00 v2020.07.20.00 v2020.07.13.00 v2020.07.06.00 v2020.06.29.00 v2020.06.15.00 v2020.06.08.00 v2020.06.01.00 v2020.05.25.00 v2020.05.18.00 v2020.05.11.00 v2020.05.04.00 v2020.04.27.00 v2020.04.20.00 v2020.04.13.00 v2020.04.06.00 v2020.03.30.00 v2020.03.23.00 v2020.03.16.00 v2020.03.09.00 v2020.03.02.00 v2020.02.24.00 v2020.02.17.00 v2020.02.10.00 v2020.02.03.00 v2020.01.27.00 v2020.01.20.00 v2020.01.13.00 v2020.01.06.00 v2019.12.30.00 v2019.12.23.00 v2019.12.16.00 v2019.12.09.00 v2019.12.06.00 v2019.12.02.00 v2019.11.11.00 v2019.11.04.00 v2019.10.28.00 v2019.10.21.00 v2019.10.14.00 v2019.10.07.00 v2019.09.30.00
No related merge requests found
...@@ -17,9 +17,11 @@ ...@@ -17,9 +17,11 @@
#pragma once #pragma once
#include <cstddef> #include <cstddef>
#include <cstdint>
#include <utility> #include <utility>
#include <folly/lang/Align.h> #include <folly/lang/Align.h>
#include <folly/lang/SafeAssert.h>
namespace folly { namespace folly {
...@@ -35,14 +37,15 @@ namespace folly { ...@@ -35,14 +37,15 @@ namespace folly {
*/ */
template <typename T> template <typename T>
class CachelinePadded { class CachelinePadded {
static_assert(
alignof(T) <= max_align_v,
"CachelinePadded does not support over-aligned types.");
public: public:
template <typename... Args> template <typename... Args>
explicit CachelinePadded(Args&&... args) explicit CachelinePadded(Args&&... args)
: inner_(std::forward<Args>(args)...) {} : inner_(std::forward<Args>(args)...) {
FOLLY_SAFE_DCHECK(
(reinterpret_cast<uintptr_t>(&inner_) % alignof(T)) == 0,
"CachelinePadded requires types aligned to their ABI requirement");
}
T* get() { T* get() {
return &inner_; return &inner_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment