[PATCH] Proposal on how to fix temporary dtors.

Jordan Rose jordan_rose at apple.com
Mon Jul 7 11:38:15 PDT 2014


On Jul 7, 2014, at 11:37 , Manuel Klimek <klimek at google.com> wrote:

> On Mon, Jul 7, 2014 at 8:05 PM, Jordan Rose <jordan_rose at apple.com> wrote:
> 
> On Jul 7, 2014, at 10:50 , Manuel Klimek <klimek at google.com> wrote:
> 
>> On Mon, Jul 7, 2014 at 7:42 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>> 
>> On Jul 7, 2014, at 10:41 , Manuel Klimek <klimek at google.com> wrote:
>> 
>>> On Mon, Jul 7, 2014 at 7:38 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>>> 
>>> On Jul 7, 2014, at 10:37 , Manuel Klimek <klimek at google.com> wrote:
>>> 
>>>> On Mon, Jul 7, 2014 at 7:29 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>>>> 
>>>> On Jul 7, 2014, at 10:28 , Manuel Klimek <klimek at google.com> wrote:
>>>> 
>>>>> On Mon, Jul 7, 2014 at 6:48 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>>>>> Can you add an assertion at the end of a block that there are no outstanding temporary destructors in the current stack frame? That seems useful.
>>>>> 
>>>>> Do you mean at the end of a VisitBlockDecl?
>>>> 
>>>> No, during the path-sensitive run, so handleBlockExit.
>>>> 
>>>> So you mean at the end of a CFG block? But here we might have outstanding temporary dtors open (?) 
>>> 
>>> Oops, right. Was thinking too much in terms of AST structure. How about at the end of a function (inlined or not)?
>>> 
>>> Could we say every time we transition from a block with a temp dtor terminator to a block that does not have a temp dtor terminator (or an unconditional terminator) we check?
>> 
>> That sounds correct, but misses the case where we built the CFG wrong (forgetting to add the branch in the correct place and thus never getting to the temp dtor block at all).
>> 
>> Makes sense. Do you have a hint where the right place on function exit to check it would be? :)
> 
> *checks* ExprEngine::processEndOfFunction.
> 
> Hm, so we'll need to adjust the data structure to be indexed by stack frame somehow (use a map) instead of the pair<expr, stack-frame>?

Eh, since it's an assertion I'd be fine with just iterating over it in a helper function. Or better, using std::find_if (if it has proper begin/end members).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140707/eda40d6f/attachment.html>


More information about the cfe-commits mailing list