llvm-project/clang/test/Layout
Tomas Matheson 7e5cea5b50 [Clang][Sema] Warn when function argument is less aligned than parameter
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
2021-03-09 10:37:32 +00:00
..
aix-Wpacked-expecting-diagnostics.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
aix-Wpacked-no-diagnostics.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
aix-double-struct-member.cpp [Frontend] Add pragma align natural and sort out pragma pack stack effect 2021-01-13 10:53:24 -05:00
aix-no-unique-address-with-double.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
aix-pack-attr-on-base.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
aix-power-alignment-typedef-2.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
aix-power-alignment-typedef.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
aix-power-natural-interaction.cpp [Frontend] Add pragma align natural and sort out pragma pack stack effect 2021-01-13 10:53:24 -05:00
aix-virtual-function-and-base-with-double.cpp [AIX] Implement AIX special alignment rule about double/long double 2020-07-27 15:13:03 -04:00
itanium-pack-and-align.cpp [AIX] Support two itanium alignment LIT testcases for AIX using regex 2020-10-13 16:47:01 -04:00
itanium-union-bitfield.cpp [AIX] Support two itanium alignment LIT testcases for AIX using regex 2020-10-13 16:47:01 -04:00
ms-aligned-array.c
ms-vtordisp-local.cpp
ms-x86-alias-avoidance-padding.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-aligned-tail-padding.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-basic-layout.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
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 [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-empty-virtual-base.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-lazy-empty-nonvirtual-base.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-member-pointers.cpp
ms-x86-misalignedarray.cpp
ms-x86-pack-and-align.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-primary-bases.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-size-alignment-fail.cpp
ms-x86-vfvb-alignment.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-vfvb-sharing.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms-x86-vtordisp.cpp [Clang][Sema] Warn when function argument is less aligned than parameter 2021-03-09 10:37:32 +00:00
ms_struct-bitfields.c
no-unique-address.cpp
v6-empty.cpp
watchos-standard-layout.cpp