[PATCH] D97187: [Clang][Sema] Warn when function argument is less aligned than parameter

Tomas Matheson via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 22 02:31:03 PST 2021


tmatheson created this revision.
tmatheson requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

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 <https://reviews.llvm.org/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


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D97187

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Sema/Sema.h
  clang/lib/Sema/SemaChecking.cpp
  clang/lib/Sema/SemaDeclCXX.cpp
  clang/lib/Sema/SemaExprCXX.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Sema/SemaOverload.cpp
  clang/lib/Sema/TreeTransform.h
  clang/test/CodeGen/typedef_alignment_mismatch_warning.cpp
  clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
  clang/test/Layout/ms-x86-aligned-tail-padding.cpp
  clang/test/Layout/ms-x86-basic-layout.cpp
  clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp
  clang/test/Layout/ms-x86-empty-virtual-base.cpp
  clang/test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp
  clang/test/Layout/ms-x86-pack-and-align.cpp
  clang/test/Layout/ms-x86-primary-bases.cpp
  clang/test/Layout/ms-x86-vfvb-alignment.cpp
  clang/test/Layout/ms-x86-vfvb-sharing.cpp
  clang/test/Layout/ms-x86-vtordisp.cpp
  clang/test/Sema/ms_class_layout.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97187.325406.patch
Type: text/x-patch
Size: 200428 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210222/f0155dc4/attachment-0001.bin>


More information about the cfe-commits mailing list