diff --git a/llvm/include/llvm/IR/Metadata.h b/llvm/include/llvm/IR/Metadata.h --- a/llvm/include/llvm/IR/Metadata.h +++ b/llvm/include/llvm/IR/Metadata.h @@ -952,7 +952,9 @@ /// For resizable MDNodes, the space for the storage vector is also allocated /// immediately before the header, overlapping with the operands. struct Header { - bool IsResizable : 1; + // Explicity set alignment on z/OS because bitfields by default + // have an alignment of 1. + bool IsResizable [[gnu::aligned(alignof(size_t))]] : 1; bool IsLarge : 1; size_t SmallSize : 4; size_t SmallNumOps : 4; @@ -1032,6 +1034,9 @@ } }; + static_assert(__builtin_offsetof(Header, NumUnresolved) == sizeof(size_t), + "NumUnresolved offset is incorrect"); + Header &getHeader() { return *(reinterpret_cast
(this) - 1); } const Header &getHeader() const {