[cfe-dev] [analyzer] Zombie symbols.

Artem Dergachev via cfe-dev cfe-dev at lists.llvm.org
Fri Mar 25 07:18:22 PDT 2016


 > At which point is the symbol removed from the state? It that a
 > byproduct of the store?

Well, yeah, i guess it's probably even "the primary product" - to erase 
the original value while overwriting. And once the original value is 
erased, it's no longer referenced.

 > > 1. Scan all symbols in the SymbolManager to find zombie symbols,
 > > deprecate the maybeDead() mechanism.
 > > 2. Wait until some kind of smart data map takes care of this extra 
work.

 > Are you talking about a data structure that keeps track of the
 > data stored by the checkers. Presumably, that could be scanned
 > to find out which symbols are tracked by the checkers? This
 > direction looks the most appealing at this point.

Seems so; why i'm also thinking of "1." is because i feel it'd make 
removeDeadBindings sooo much easier to understand and sooo much more 
intuitive - which it seems to need, as even an issue as simple as this 
one had remained unnoticed. It seems that everybody was thinking that 
"1." is already there. "The garbage collector was supposed to see which 
symbols are referenced and remove those that aren't, how else could it 
work?" In this case, we probably wouldn't even need a worklist [which 
currently iterates only through the store, but also needs to iterate 
through the GDM at the same time, as there may be mutual dependencies 
between symbols here and there] during garbage collection, just rely on 
later iterations to clean up sub-symbols step by step. So i'd probably 
give it a try some day and try to explain it in more details if 
something useful shows up.

Though i've no idea about performance; the worklist would most likely 
still have better performance.

And also, if we make a new API for the data map, the old API might still 
want to be fixed somehow.


More information about the cfe-dev mailing list