[analyzer] MoveChecker: Add checks for dereferencing a smart pointer after move.
authorArtem Dergachev <artem.dergachev@gmail.com>
Sat, 15 Dec 2018 01:53:38 +0000 (01:53 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Sat, 15 Dec 2018 01:53:38 +0000 (01:53 +0000)
commitffba750a0eddeec12267a9a31682b3b286141d88
treea01e0defd4a0a58fc182460a95c8fc7a7337ac14
parentb5b974e4b3157be16368fa2200c847a0637227cd
[analyzer] MoveChecker: Add checks for dereferencing a smart pointer after move.

Calling operator*() or operator->() on a null STL smart pointer is
undefined behavior.

Smart pointers are specified to become null after being moved from.
So we can't warn on arbitrary method calls, but these two operators
definitely make no sense.

The new bug is fatal because it's an immediate UB,
unlike other use-after-move bugs.

The work on a more generic null smart pointer dereference checker
is still pending.

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

llvm-svn: 349226
clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp
clang/test/Analysis/use-after-move.cpp