forked from OSchip/llvm-project
7e5cea5b50
See https://bugs.llvm.org/show_bug.cgi?id=42154. 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 Differential Revision: https://reviews.llvm.org/D97187 |
||
---|---|---|
.. | ||
aix-Wpacked-expecting-diagnostics.cpp | ||
aix-Wpacked-no-diagnostics.cpp | ||
aix-double-struct-member.cpp | ||
aix-no-unique-address-with-double.cpp | ||
aix-pack-attr-on-base.cpp | ||
aix-power-alignment-typedef-2.cpp | ||
aix-power-alignment-typedef.cpp | ||
aix-power-natural-interaction.cpp | ||
aix-virtual-function-and-base-with-double.cpp | ||
itanium-pack-and-align.cpp | ||
itanium-union-bitfield.cpp | ||
ms-aligned-array.c | ||
ms-vtordisp-local.cpp | ||
ms-x86-alias-avoidance-padding.cpp | ||
ms-x86-aligned-tail-padding.cpp | ||
ms-x86-basic-layout.cpp | ||
ms-x86-bitfields-vbases.cpp | ||
ms-x86-declspec-empty_bases.cpp | ||
ms-x86-empty-base-after-base-with-vbptr.cpp | ||
ms-x86-empty-layout.c | ||
ms-x86-empty-nonvirtual-bases.cpp | ||
ms-x86-empty-virtual-base.cpp | ||
ms-x86-lazy-empty-nonvirtual-base.cpp | ||
ms-x86-member-pointers.cpp | ||
ms-x86-misalignedarray.cpp | ||
ms-x86-pack-and-align.cpp | ||
ms-x86-primary-bases.cpp | ||
ms-x86-size-alignment-fail.cpp | ||
ms-x86-vfvb-alignment.cpp | ||
ms-x86-vfvb-sharing.cpp | ||
ms-x86-vtordisp.cpp | ||
ms_struct-bitfields.c | ||
no-unique-address.cpp | ||
v6-empty.cpp | ||
watchos-standard-layout.cpp |