[cfe-commits] r119044 - in /cfe/trunk: lib/Analysis/CFG.cpp test/Analysis/temp-obj-dtors-cfg-output.cpp
Zhongxing Xu
xuzhongxing at gmail.com
Sun Nov 14 07:23:50 PST 2010
Author: zhongxingxu
Date: Sun Nov 14 09:23:50 2010
New Revision: 119044
URL: http://llvm.org/viewvc/llvm-project?rev=119044&view=rev
Log:
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.
Modified:
cfe/trunk/lib/Analysis/CFG.cpp
cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp
Modified: cfe/trunk/lib/Analysis/CFG.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=119044&r1=119043&r2=119044&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/CFG.cpp (original)
+++ cfe/trunk/lib/Analysis/CFG.cpp Sun Nov 14 09:23:50 2010
@@ -2579,18 +2579,11 @@
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();
Modified: cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp?rev=119044&r1=119043&r2=119044&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp (original)
+++ cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp Sun Nov 14 09:23:50 2010
@@ -264,11 +264,14 @@
// CHECK: Successors (2): B3 B2
// CHECK: [ B5 ]
// CHECK: 1: ~A() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
// CHECK: Predecessors (1): B7
// CHECK: Successors (1): B4
// CHECK: [ B6 ]
// CHECK: 1: ~A() (Temporary object destructor)
-// CHECK: 2: ~B() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
+// CHECK: 3: ~A() (Temporary object destructor)
+// CHECK: 4: ~B() (Temporary object destructor)
// CHECK: Predecessors (1): B7
// CHECK: Successors (1): B4
// CHECK: [ B7 ]
@@ -308,11 +311,14 @@
// CHECK: Successors (1): B0
// CHECK: [ B2 ]
// CHECK: 1: ~A() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
// CHECK: Predecessors (1): B4
// CHECK: Successors (1): B1
// CHECK: [ B3 ]
// CHECK: 1: ~A() (Temporary object destructor)
-// CHECK: 2: ~B() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
+// CHECK: 3: ~A() (Temporary object destructor)
+// CHECK: 4: ~B() (Temporary object destructor)
// CHECK: Predecessors (1): B4
// CHECK: Successors (1): B1
// CHECK: [ B4 ]
@@ -345,7 +351,8 @@
// CHECK: Successors (1): B7
// CHECK: [ B9 ]
// CHECK: 1: ~A() (Temporary object destructor)
-// CHECK: 2: ~B() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
+// CHECK: 3: ~B() (Temporary object destructor)
// CHECK: Predecessors (1): B10
// CHECK: Successors (1): B7
// CHECK: [ B10 ]
@@ -385,6 +392,7 @@
// CHECK: Successors (1): B0
// CHECK: [ B2 ]
// CHECK: 1: ~A() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
// CHECK: Predecessors (1): B3
// CHECK: Successors (1): B1
// CHECK: [ B3 ]
@@ -418,6 +426,7 @@
// CHECK: Successors (1): B0
// CHECK: [ B2 ]
// CHECK: 1: ~A() (Temporary object destructor)
+// CHECK: 2: ~A() (Temporary object destructor)
// CHECK: Predecessors (1): B3
// CHECK: Successors (1): B1
// CHECK: [ B3 ]
More information about the cfe-commits
mailing list