GCC's attribute((align)) can reduce the alignment of a type when applied to
a typedef. However, functions which take a pointer or reference to the
original type are compiled assuming the original alignment. Therefore when any
such function is passed an object of the new, less-aligned type, an alignment
fault can occur. In particular, this applies to the constructor, which is
defined for the original type and called for the less-aligned object.
This change adds a warning whenever an pointer or reference to an object is
passed to a function that was defined for a more-aligned type.
The calls to ASTContext::getTypeAlignInChars seem change the order in which
record layouts are evaluated, which caused changes to the output of
-fdump-record-layouts. As such some tests needed to be updated:
- Use CHECK-LABEL rather than counting the number of "Dumping AST Record Layout" headers.
- Check for end of line in labels, so that struct B1 doesn't match struct B etc.
- Add --strict-whitespace, since the whitespace shows meaningful structure.
- The order in which record layouts are printed has changed in some cases.
- clang-format for regions changed