[Sema] Add sizeof diagnostics for bzero
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Thu, 4 Aug 2016 23:55:22 +0000 (23:55 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Thu, 4 Aug 2016 23:55:22 +0000 (23:55 +0000)
commitedf3d81cbf639200e63dedf3fb9f576e5fa1597a
tree633c351bc5737440e22e9f6b96750783fa17e4c1
parentc33f0e25c944ad7397844760137d95ff44c647db
[Sema] Add sizeof diagnostics for bzero

For memset (and others) we can get diagnostics like:

  struct stat { int x; };
  void foo(struct stat *stamps) {
    bzero(stamps, sizeof(stamps));
    memset(stamps, 0, sizeof(stamps));
  }

  t.c:7:28: warning: 'memset' call operates on objects of type 'struct stat' while the size is based on a different type 'struct stat *' [-Wsizeof-pointer-memaccess]
    memset(stamps, 0, sizeof(stamps));
           ~~~~~~            ^~~~~~
  t.c:7:28: note: did you mean to dereference the argument to 'sizeof' (and multiply it by the number of elements)?
    memset(stamps, 0, sizeof(stamps));
                             ^~~~~~

This patch implements the same class of warnings for bzero.

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

rdar://problem/18963514

llvm-svn: 277787
clang/lib/AST/Decl.cpp
clang/lib/Sema/SemaChecking.cpp
clang/test/SemaCXX/warn-memset-bad-sizeof.cpp