This patch implements PR#22821.
authorRoger Ferrer Ibanez <roger.ferreribanez@arm.com>
Fri, 12 Aug 2016 08:04:13 +0000 (08:04 +0000)
committerRoger Ferrer Ibanez <roger.ferreribanez@arm.com>
Fri, 12 Aug 2016 08:04:13 +0000 (08:04 +0000)
commit722a4db1985ca9a8b982074d658dfee9c4624d53
tree6e1feae76b0cb2244b98abbc4f2e33457fe32a74
parent85c6b44817227d838a3f3385f707ecf42dc79713
This patch implements PR#22821.

Taking the address of a packed member is dangerous since the reduced
alignment of the pointee is lost. This can lead to memory alignment
faults in some architectures if the pointer value is dereferenced.

This change adds a new warning to clang emitted when taking the address
of a packed member. A packed member is either a field/data member
declared as attribute((packed)) or belonging to a struct/class
declared as such. The associated flag is -Waddress-of-packed-member.
Conversions (either implicit or via a valid casting) to pointer types
with lower or equal alignment requirements (e.g. void* or char*)
will silence the warning.

Differential Revision: https://reviews.llvm.org/D20561

llvm-svn: 278483
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaCast.cpp
clang/lib/Sema/SemaChecking.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaInit.cpp