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

Marcin Świderski marcin.sfider at gmail.com
Sat Nov 13 11:21:00 PST 2010


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20101113/c4fc7625/attachment.html>


More information about the cfe-commits mailing list