dependent passes

I am trying to create two passes X and Y, in which pass X depends on pass Y. After attempting this several times it appears that pass Y must be in the llvm namespace. Whenever it was not in the llvm namespace, "opt -load" would complain about undefined symbols when I called getAnalysis<>(). Am I correct that the pass that is depended on must be in the llvm namespace? If so, that was not clear in the documentation regarding writing an LLVM pass.

Ryan says,

I think that we are talking about two different things. I understand that in order to use LLVM classes you must either qualify them with the llvm namespace or use the statement "using namespace llvm;" What I'm saying is that it has been my experience that when a pass Y depends on another pass X, i.e, Y is a required analysis of X, then Y must be defined within the llvm namespace rather than in an anonymous namespace as suggests it should be. I'm wondering if that is correct, or if I'm missing something.


Devang Patel wrote:

If X depends on Y, and Y is defined in another file in an anonymous namespace, there is no way for X to refer to Y. This is how C++ anonymous namespaces work, which doesn't have anything to do with passes.

I've used passes defined in other (non-anon) namespaces, and they seem to work fine. Can you elaborate on the problem you're seeing?


Thanks Chris. The problem that I was seeing is that when Y is defined in a separate file from X, in an anonymous namespace, X has no way to refer to Y. Everything was fixed when I gave a name to the namespace that Y was defined in, and contrary to my previous post, that namespace name does not necessarily need to be llvm.


Chris Lattner wrote: