<div dir="ltr">Greetings,<div><br></div><div>I have encountered a bug in the static analyzer <<a href="http://llvm.org/bugs/show_bug.cgi?id=16745">http://llvm.org/bugs/show_bug.cgi?id=16745</a>>, which I have traced back to a problem with a synthesized operator=(). In short, the analyzer currently assumes that each expression object occurs in a function only once, and this breaks down for synthesized functions, as Sema happily reuses various Exprs there.</div>
<div><br></div><div>So, now the question is how to proceed. One possible solution (one that Jordan suggests) would be to have Sema not reuse any Exprs during synthesis of various functions. This should be fairly easy, but it will touch a larger amount of code (as the synthesis algorithm is recursive, I would need to pass some sort of expression factory objects instead of plain Expr *s back and forth). It would also make the code look less pretty and cause (probably only slight) memory increase.</div>
<div><br></div><div>Because of these downsides, I am not sure if a change like this would be accepted into the tree. Therefore, I wanted to ask you what do you think about this change before I invest time into carrying it out. Would you accept a patch like this? Or should i try to fix the problem from the analyzer side (right now I think it's doable, but it's quite possible i'll run into unexpected troubles)? Also, can you think of any other situations where sharing expression objects could cause troubles (template instantiations have been mentioned, but these should be fine as they don't produce nodes in the same function)?</div>
<div><br></div><div>regards,</div><div>pavel</div></div>