[analyzer] Add sink after construction of temporary with no-return destructor.
authorDevin Coughlin <dcoughlin@apple.com>
Mon, 19 Dec 2016 22:23:22 +0000 (22:23 +0000)
committerDevin Coughlin <dcoughlin@apple.com>
Mon, 19 Dec 2016 22:23:22 +0000 (22:23 +0000)
commit5b1ee2fad97ceec55c6b22154b425954649a95b8
tree865843eacb97918d695c4289b6dc9f0307986868
parentd9430944f4bb423a15785a0cea2bc6a76c50ecdb
[analyzer] Add sink after construction of temporary with no-return destructor.

The analyzer's CFG currently doesn't have nodes for calls to temporary
destructors. This causes the analyzer to explore infeasible paths in which
a no-return destructor would have stopped exploration and so results in false
positives when no-return destructors are used to implement assertions.

To mitigate these false positives, this patch stops generates a sink after
evaluating a constructor on a temporary object that has a no-return destructor.
This results in a loss of coverage because the time at which the destructor is
called may be after the time of construction (especially for lifetime-extended
temporaries).

This addresses PR15599.

rdar://problem/29131566

llvm-svn: 290140
clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
clang/test/Analysis/temporaries.cpp