[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
Loading
Please register or sign in to comment