[cfe-commits] r118991 - in /cfe/trunk: lib/Analysis/CFG.cpp test/Analysis/temp-obj-dtors-cfg-output.cpp

Zhongxing Xu xuzhongxing at gmail.com
Sat Nov 13 15:48:03 PST 2010


2010/11/14 Marcin Świderski <marcin.sfider at gmail.com>

> W dniu 13 listopada 2010 12:37 użytkownik Zhongxing Xu <
> xuzhongxing at gmail.com> 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 <marcin.sfider at gmail.com>
>>
>> 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.
>

Hi Marcin,

I still do not understand your point. The current implementation works well
for the above example. One block-level expr for CXXTemporaryObjectExpr. One
temporary dtor for CXXBindTemporaryExpr.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20101114/ecff3d7f/attachment.html>


More information about the cfe-commits mailing list