[all-commits] [llvm/llvm-project] 7e5cea: [Clang][Sema] Warn when function argument is less ...

tmatheson-arm via All-commits all-commits at lists.llvm.org
Tue Mar 9 02:38:45 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 7e5cea5b509f5535eab6d1ea9b90e033570758a6
      https://github.com/llvm/llvm-project/commit/7e5cea5b509f5535eab6d1ea9b90e033570758a6
  Author: Tomas Matheson <tomas.matheson at arm.com>
  Date:   2021-03-09 (Tue, 09 Mar 2021)

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

  Log Message:
  -----------
  [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




More information about the All-commits mailing list