Hi Zhongxing Won't it lead to unbalancing ctors/dtors like I've written in discusion after commit r118159?
2010/11/13 Zhongxing Xu <[email protected]> > Author: zhongxingxu > Date: Sat Nov 13 01:30:59 2010 > New Revision: 118991 > > URL: http://llvm.org/viewvc/llvm-project?rev=118991&view=rev > Log: > Do not add implicit dtors for CXXBindTemporaryExpr with elidable > CXXConstructExpr. > > 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=118991&r1=118990&r2=118991&view=diff > > ============================================================================== > --- cfe/trunk/lib/Analysis/CFG.cpp (original) > +++ cfe/trunk/lib/Analysis/CFG.cpp Sat Nov 13 01:30:59 2010 > @@ -2579,11 +2579,18 @@ > 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) { > + if (!BindToTemporary && !hasElidableCXXConstructExpr(E)) { > // 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=118991&r1=118990&r2=118991&view=diff > > ============================================================================== > --- cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp (original) > +++ cfe/trunk/test/Analysis/temp-obj-dtors-cfg-output.cpp Sat Nov 13 > 01:30:59 2010 > @@ -264,14 +264,11 @@ > // 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: ~A() (Temporary object destructor) > -// CHECK: 3: ~A() (Temporary object destructor) > -// CHECK: 4: ~B() (Temporary object destructor) > +// CHECK: 2: ~B() (Temporary object destructor) > // CHECK: Predecessors (1): B7 > // CHECK: Successors (1): B4 > // CHECK: [ B7 ] > @@ -311,14 +308,11 @@ > // 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: ~A() (Temporary object destructor) > -// CHECK: 3: ~A() (Temporary object destructor) > -// CHECK: 4: ~B() (Temporary object destructor) > +// CHECK: 2: ~B() (Temporary object destructor) > // CHECK: Predecessors (1): B4 > // CHECK: Successors (1): B1 > // CHECK: [ B4 ] > @@ -351,8 +345,7 @@ > // CHECK: Successors (1): B7 > // CHECK: [ B9 ] > // CHECK: 1: ~A() (Temporary object destructor) > -// CHECK: 2: ~A() (Temporary object destructor) > -// CHECK: 3: ~B() (Temporary object destructor) > +// CHECK: 2: ~B() (Temporary object destructor) > // CHECK: Predecessors (1): B10 > // CHECK: Successors (1): B7 > // CHECK: [ B10 ] > @@ -392,7 +385,6 @@ > // 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 ] > @@ -426,7 +418,6 @@ > // 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 ] > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
