The "aligned" attribute can only increase the alignment of a struct, or struct member, unless it's used together with the "packed" attribute, or used as a part of a typedef, in which case, the "aligned" attribute can both increase and decrease alignment.
That said, we expect:
- "aligned" attribute alone: does not interfere with the alignment upgrade instrumented by the AIX "power" alignment rule,
- "aligned" attribute + typedef: overrides any computed alignment,
- "aligned" attribute + "packed" attribute: overrides any computed alignment.
The old implementation achieved 2 and 3, but didn't get 1 right, in that any field marked attribute "aligned" would not go through the alignment upgrade.
We've been calling things like this FooKind for a while. FooType is pretty problematic in a compiler where we have a lot of type representations. I think there are a few grandfathered exceptions, but still, let's call it AlignRequirementKind.