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.
Thanks,
Ryan
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 http://llvm.org/docs/WritingAnLLVMPass.html suggests it should be. I'm wondering if that is correct, or if I'm missing something.
Regards,
Ryan
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?
-Chris
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.
Ryan
Chris Lattner wrote: