[clang] aligned attribute doc (PR #195278)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Mon May 4 09:18:39 PDT 2026


================
@@ -10000,3 +9983,46 @@ different languages to coexist on the same call stack while each interpreting
 exceptions according to their own rules.
   }];
 }
+
+def AlignedDocs : Documentation {
+  let Category = DocCatDecl;
+  let Heading = "aligned";
+  let Content = [{
+The ``aligned`` attribute specifies a minimum alignment (in bytes) for a 
+variable, structure field, or type definition. The attribute takes an 
+optional non-negative integral constant expression. If the value is a 
+power of two, the compiler ensures the declaration is aligned to at least 
+that boundary; a value of zero has no effect.
+
+.. code-block:: c++
+
+  struct __attribute__((aligned(8))) S { 
+    short f[3]; 
+  };
+
+If the alignment factor is omitted, the compiler defaults to the largest(the most strict) 
+alignment supported by the target machine for any data type. 
+
+Applying this attribute to a structure or union changes the type's layout 
+properties. To ensure that array indexing and pointer arithmetic remain 
+consistent, the compiler automatically increases the structure's total size 
+(via tail padding) to a multiple of the alignment value. For example, a 
+struct with a natural size of 6 bytes marked ``aligned(8)`` will be 
+padded to 8 bytes.
----------------
AaronBallman wrote:

It'd be good to explain what happens with inheritance in C++, like:
```
struct alignas(16) S {
  int i;
};

struct T : S {
  int j;
};
```
(the alignment from the base class is treated the same as if there was an alignment specified on a field in the derived class: https://godbolt.org/z/6M178YhY1)

https://github.com/llvm/llvm-project/pull/195278


More information about the cfe-commits mailing list