https://github.com/perry-ca created 
https://github.com/llvm/llvm-project/pull/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).

>From 2dc4b2785d9dea502e7a496a0f4069adf7c79d64 Mon Sep 17 00:00:00 2001
From: Sean Perry <pe...@ca.ibm.com>
Date: Mon, 13 Jan 2025 12:53:05 -0500
Subject: [PATCH] add tail padding if needed

---
 clang/include/clang/AST/TypeLoc.h | 1 +
 1 file changed, 1 insertion(+)

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;
   }
 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to