[PATCH] D57230: [analyzer] Toning down invalidation a bit

Gábor Horváth via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 11 09:20:04 PST 2019

xazax.hun added a comment.

I think I might have a theory, but I would like to discuss it as I am not  familiar with the internals  bindings.

My theory is the following: when we store the bindings, we store them in a map where the key is a base region. 
So when we try to look the bindings up with a non-base region, we will not get any bindings.

So in our current case, we end up having a non-base region in the worklist of `InvalidateRegionsWorker`. 
`ClusterAnalysis::RunWorkList` will look up the cluster for the non-base region.
Without a cluster found we will not visit the bindings. With not visiting the bindings, we will not invalidate the symbols.
With no symbols to invalidate, the checkers will not get notified.

I think the whole `ClusterAnalysis` is flawed at this point. Most of the code expects to only see base regions, but some code paths might end up adding non-base regions.

So the question is, what should be the proper way to handle the `TK_DoNotInvalidateSuperRegion` trait?
Maybe we should always look up the bindings using the base region. But if we do, should we actually visit all of the bindings?

I did not have time yet to play with the possible solutions and will come back to this problem soon, just wanted to write down what I got so far.




More information about the llvm-commits mailing list