I've used Reflection.Emit in the past to write a compiler, but I know the standard compilers don't use it, and in an answer to another question here I saw a mention that there are some things Reflection.Emit is unable to do.
What are the limitations of Reflection.Emit that I should be aware of if I plan on writing another compiler for .NET?