From 7f9eb168a9a8f5ff4fc931a00aec43e8706afecb Mon Sep 17 00:00:00 2001 From: Aleksandr Urakov Date: Tue, 9 Oct 2018 07:33:09 +0000 Subject: [PATCH] [ADT] Change the `IntervalMap` alignment assert for x86 MSVC Summary: This patch forces the alignment of the `data` field of `IntervalMap`. It is because x86 MSVC doesn't apply automatically (without `__declspec(align(...))`) alignments more than 4 bytes, even if `alignof` has returned so. Consider the example: https://godbolt.org/z/zIPa_G Here `alignof` for both `S0` and `S1` returns `8`, but only `S1` is really aligned on x86. The explanation of this behavior is here: https://docs.microsoft.com/en-us/cpp/build/conflicts-with-the-x86-compiler Reviewers: bkramer, stoklund, hans, rnk Reviewed By: rnk Subscribers: dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D52613 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344018 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/IntervalMap.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/llvm/ADT/IntervalMap.h b/include/llvm/ADT/IntervalMap.h index e2fced1095f..a72967c7802 100644 --- a/include/llvm/ADT/IntervalMap.h +++ b/include/llvm/ADT/IntervalMap.h @@ -964,7 +964,7 @@ public: private: // The root data is either a RootLeaf or a RootBranchData instance. - AlignedCharArrayUnion data; + LLVM_ALIGNAS(RootLeaf) AlignedCharArrayUnion data; // Tree height. // 0: Leaves in root. -- 2.11.0