diff options
author | Tomas Matheson <tomas.matheson@arm.com> | 2021-02-19 17:33:56 +0000 |
---|---|---|
committer | Tomas Matheson <tomas.matheson@arm.com> | 2021-03-09 10:37:32 +0000 |
commit | 7e5cea5b509f5535eab6d1ea9b90e033570758a6 (patch) | |
tree | 46f2ae7ff10a094b4b39cb675bb88024c5f73c9c /llvm/lib/CodeGen/TargetLoweringBase.cpp | |
parent | 85801b4c68ee4f1c7b9f2a33162d852b577fe536 (diff) | |
download | llvm-7e5cea5b509f5535eab6d1ea9b90e033570758a6.zip llvm-7e5cea5b509f5535eab6d1ea9b90e033570758a6.tar.gz llvm-7e5cea5b509f5535eab6d1ea9b90e033570758a6.tar.bz2 |
[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
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringBase.cpp')
0 files changed, 0 insertions, 0 deletions