Reading the LLVM documentation of SmallVector (http://llvm.org/docs/ProgrammersManual.html#llvm-adt-smallvector-h) I'm not sure if it's a good idea to use it as a member of the Declaration class. Wouldn't it blow up the size of it by a large degree? I imagine there're quite a few Declaration objects around.