[analyzer] Re-enable C++17-specific RVO construction contexts.
authorArtem Dergachev <artem.dergachev@gmail.com>
Thu, 14 Jun 2018 01:59:35 +0000 (01:59 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Thu, 14 Jun 2018 01:59:35 +0000 (01:59 +0000)
commitf28d7f1721eaa307065ad6388c7f845bd4db2b9d
treee897d641792dac5615c729475695d389b03592f3
parent53b8ce0edbad190746ef2a94acd851ac77eef702
[analyzer] Re-enable C++17-specific RVO construction contexts.

Not contexts themselves, but rather support for them in the analyzer.

Such construction contexts appear when C++17 mandatory copy elision occurs
while returning an object from a function, and presence of a destructor causes
a CXXBindTemporaryExpr to appear in the AST.

Additionally, such construction contexts may be chained, because a return-value
construction context doesn't really explain where the object is being returned
into, but only points to the parent stack frame, where the object may be
consumed by literally anything including another return statement. This
behavior is now modeled correctly by the analyzer as long as the object is not
returned beyond the boundaries of the analysis.

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

llvm-svn: 334684
clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
clang/test/Analysis/cxx17-mandatory-elision.cpp