summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/CFG.cpp
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2010-11-14 15:23:50 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2010-11-14 15:23:50 +0000
commitfee455fcf5993787c4366998dbfb5bd228441daa (patch)
tree6c7e091feb4d305b726e86cd0f40efd42ae3f42f /clang/lib/Analysis/CFG.cpp
parent4581ddc123deac8c5a6f586be77c6fbd50e86597 (diff)
downloadbcm5719-llvm-fee455fcf5993787c4366998dbfb5bd228441daa.tar.gz
bcm5719-llvm-fee455fcf5993787c4366998dbfb5bd228441daa.zip
Revert r118991.
Elidable CXXConstructExpr should inhibit calling destructor for temporary that is copied, not the one created. This is because eliding copy constructor means that the object that was to be copied will be constructed directly in memory the copy would be constructed in. llvm-svn: 119044
Diffstat (limited to 'clang/lib/Analysis/CFG.cpp')
-rw-r--r--clang/lib/Analysis/CFG.cpp9
1 files changed, 1 insertions, 8 deletions
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index 42e081628d8..ef67d3b9576 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -2579,18 +2579,11 @@ CFGBlock *CFGBuilder::VisitBinaryOperatorForTemporaryDtors(BinaryOperator *E) {
return RHSBlock ? RHSBlock : LHSBlock;
}
-static bool hasElidableCXXConstructExpr(CXXBindTemporaryExpr *E) {
- if (CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E->getSubExpr()))
- if (CE->isElidable())
- return true;
- return false;
-}
-
CFGBlock *CFGBuilder::VisitCXXBindTemporaryExprForTemporaryDtors(
CXXBindTemporaryExpr *E, bool BindToTemporary) {
// First add destructors for temporaries in subexpression.
CFGBlock *B = VisitForTemporaryDtors(E->getSubExpr());
- if (!BindToTemporary && !hasElidableCXXConstructExpr(E)) {
+ if (!BindToTemporary) {
// If lifetime of temporary is not prolonged (by assigning to constant
// reference) add destructor for it.
autoCreateBlock();
OpenPOWER on IntegriCloud