[cfe-dev] Reuse of expressions in synthesized functions.

Abramo Bagnara abramo.bagnara at gmail.com
Tue Aug 13 22:45:42 PDT 2013


Il 14/08/2013 00:30, Douglas Gregor ha scritto:
> 
> On Aug 13, 2013, at 3:08 AM, Pavel Labath <labath at google.com
> <mailto:labath at google.com>> wrote:
> 
>> Greetings,
>>
>> I have encountered a bug in the static analyzer
>> <http://llvm.org/bugs/show_bug.cgi?id=16745>, 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.
>>
>> 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.
>>
>> 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)?
> 
> I think it’s fine to teach Sema to build unique expressions within its
> synthesized assignment operators. It’s a cleaner model for the AST anyway.

Is this *in general* a viable approach?

I'm thinking to repeated initializer in InitListExpr (as long as we need
to put in AST the expanded nodes).


-- 
Abramo Bagnara

Via Borghesi, 16
48014 Castel Bolognese (RA) - Italy



More information about the cfe-dev mailing list