EvaluateLogicalExpression is called only for the topmost logical operator. I need the values to survive until then, so I mark them as live.
I marked the non-leaf expressions as live, because the destructor branch can depend on any sub-expression, not just leaves. E.g. for an expression like (a || b) && A(), the destructor for A will have (a || b) as a terminator, but this value was never stored in the state before. Therefore, I compute these values in EvaluateLogicalExpression and store them in the state. I didn't try to figure out which values will be really needed, so I just stored all of them (not really all, only those that were actually computed on this path). Now that I think about it, I think it should be possible to just mark the leaves -- the relevant non-leaf expressions should be marked as live when we visit the corresponding terminator. I am not sure which part are you having doubts about. Could you describe it more verbosely? On 14 August 2013 20:44, Jordan Rose <[email protected]> wrote: > > I see that, but since you still need to record the explicit choice for > each BinaryOperator in the state, why do you need the leaves? > > (Sorry, I didn't remember that some leaves could be Unknown, which makes > everything fall apart.) > > http://llvm-reviews.chandlerc.com/D1340 >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
