Did you also un-revert the "support for temporary destructors" patch? Without 
this, the test you mentioned has to fail, because it has no way of detecting 
that the destructor does not return. With that patch applied, all tests pass 
(at least for me :) ). The patch is incomplete, and it could fail, but this 
will only happen for more complex expressions. To deal with that, I have tried 
a bit different approach. It is still based on the "saving the conditional 
expression value in the environment" idea, but I'll be saving it differently, 
not in the processBranch terminators. I'll attach that as a separate patch once 
i'm confident about it.

  I didn't get around to trying the trivial inlined function. I will reply to 
the rest of the comment after that.

  Right now, I have a different question, which is somewhat unrelated, but it 
is stopping me from doing large-scale tests of my changes. E.g., for code 
patterns like this
    const std::initializer_list<A> &a = { A(), A() };
  I end up with having destructor for 'const A [2]' in the CFG. This is then 
causing assertion failures all around the analyzer, since it assumes that only 
CXXRecordDecl's can have destructors. So, my question is: Is the presence of 
this element in the CFG intentional or is it a bug. I.e., should I fix the 
CFGBuilder to not generate the node, or change the analyzer to deal with it. 
Right now, I'm inclined towards the first option, as I don't see the purpose in 
having a destructor for the array (and i have the destructors for the contained 
elements in the cfg anyway), but I wanted to double check that. Do you know the 
answer, or should I direct it to someone else?

http://llvm-reviews.chandlerc.com/D1259
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to