W dniu 13 listopada 2010 12:37 użytkownik Zhongxing Xu < [email protected]> napisał:
> I see some unbalancing before this patch. (See the test case that was > modified.) Could you provide an example that is unbalanced by this patch? > > 2010/11/13 Marcin Świderski <[email protected]> > > Hi Zhongxing >> >> Won't it lead to unbalancing ctors/dtors like I've written in discusion >> after commit r118159? >> >> >> When I wrote about unbalancing I meant that removing elidable CXXConstructExpr and then removing destructors for temporaries that where created with those expressions will unbalance ctors/dtors calls. Because not every call to the ctor is a block level statement this is not visualised in the CFG. Example of this is simple: class A { public: A() {} ~A() {} }; A foo() { return A(); } AST for function foo() looks like this: A foo() (CompoundStmt 0x105048b98 <main.cpp:7:9, col:23> (ReturnStmt 0x105048b70 <col:11, col:20> (CXXExprWithTemporaries 0x105048b38 <col:18, col:20> 'class A' (CXXTemporary 0x105048a80) (CXXConstructExpr 0x105048af0 <col:18, col:20> 'class A''void (const class A &) throw()' elidable (ImplicitCastExpr 0x105048ad0 <col:18, col:20> 'const class A' <NoOp> (CXXBindTemporaryExpr 0x105048a88 <col:18, col:20> 'class A' (CXXTemporary 0x105048a80) (CXXTemporaryObjectExpr 0x105048a38 <col:18, col:20> 'class A''void (void)'))))))) If we want to ensure that the CFG is constructed from AST with all elidable constructors elided, for above example we would have to ignore both CXXConstructExpr and CXXBindTemporaryExpr. In your implementation only the first will be elided.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
