]> granicus.if.org Git - clang/commit
[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)
commit3efe802b4e854017f1e120006168bcd5056254dc
treebfcec531d27ac8d40ca0d3fb93d1f38e7d1c68d1
parent5cc8e8e46cffb91599efc751efa20c6bdf350884
[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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290140 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
test/Analysis/temporaries.cpp