[clang] 89305c3 - [z/OS] add tail padding to TypeLoc if needed (#122761)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 17 08:14:53 PST 2025
Author: Sean Perry
Date: 2025-01-17T11:14:50-05:00
New Revision: 89305c371552adba2bd10394d2c645c9792840b2
URL: https://github.com/llvm/llvm-project/commit/89305c371552adba2bd10394d2c645c9792840b2
DIFF: https://github.com/llvm/llvm-project/commit/89305c371552adba2bd10394d2c645c9792840b2.diff
LOG: [z/OS] add tail padding to TypeLoc if needed (#122761)
The code in getLocalDataSize() returns the sum of the size of the
LocalData plus the size of the extra data. The start of the extra data
is padded so it starts on a multiple of it's alignment. We also need to
be adding tail padding so the final size is a multiple of the alignment
of the LocalData. On most systems the alignment of the extra data is the
same or greater than the alignment of the LocalData so you don't need
the tail padding. However, on z/OS, the alignment of the extra data is
less than the alignment of the LocalData and thus you do need the tail
padding to make the final size a multiple of the LocalData alignment.
The extra data is the WrittenBuiltinSpecs struct. This struct is just a
struct of bitfields. On most systems the alignment of the struct is
determined by the type of the bitfields (eg. unsigned int -> align of
4). On z/OS, all bitfields are 1 byte aligned. Thus on z/OS
WrittenBuiltinSpecs is only size 2 with alignment of 1 (verses 4 & 4).
Added:
Modified:
clang/include/clang/AST/TypeLoc.h
Removed:
################################################################################
diff --git a/clang/include/clang/AST/TypeLoc.h b/clang/include/clang/AST/TypeLoc.h
index 62ca52e508ba20..a55a38335ef6a6 100644
--- a/clang/include/clang/AST/TypeLoc.h
+++ b/clang/include/clang/AST/TypeLoc.h
@@ -397,6 +397,7 @@ class ConcreteTypeLoc : public Base {
unsigned extraAlign = asDerived()->getExtraLocalDataAlignment();
size = llvm::alignTo(size, extraAlign);
size += asDerived()->getExtraLocalDataSize();
+ size = llvm::alignTo(size, asDerived()->getLocalDataAlignment());
return size;
}
More information about the cfe-commits
mailing list