[PATCH] Proposal on how to fix temporary dtors.

Manuel Klimek klimek at google.com
Thu Jun 19 14:19:53 PDT 2014


On Thu, Jun 19, 2014 at 6:30 PM, Jordan Rose <jordan_rose at apple.com> wrote:

> I think the algorithm makes sense. I'm not sure it's different, though,
> than just passing up the first (or last) CXXBindTemporaryExpr visited for a
> given expression, which would look like this:
>
>     // For a logical expression...
>     VisitForTemporaryDtors(E->getLHS(), false, &LastBTE);
>     const CXXBindTemporaryExpr *InnerBTE = nullptr;
>     VisitForTemporaryDtors(E->getRHS(), false, &InnerBTE);
>     InsertTempDtorDecisionBlock(InnerBTE);
>
> Are there any cases that wouldn't cover?
>

Well, the problem is what to do if we don't have a BTE yet; if we only
wanted to pass one pointer, the semantics on function exit would need to be:
if (BTE) { we have already found a BTE, no need to insert a new block when
we encounter the next }
else { we have not yet found a BTE, so we need to insert a new block when
we find one }

The "unconditional" branch would only fit with the first part, so we would
need to somehow conjure non-null BTE for all unconditional entries, and
then afterwards know that this is a special value, because since we didn't
add an extra block (as we were running an unconditional case), we don't
need a decision block.
I'd say that's a pretty strong argument that we at least need to pass the
CXXBindTemporaryExpr* and a bool IsConditional.

Now it's right that we don't need to remember the Succ when we hit the
conditional, and instead we could just always store the Succ when we enter
a recursive visitation for a conditional branch (we need to store the Succ
because we can have nested conditionals), but that seems to me like it
would distribute the logic through even more places, and thus undesirable.

Cheers,
/Manuel



>
> http://reviews.llvm.org/D3627
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140619/68e5f4c7/attachment.html>


More information about the cfe-commits mailing list