Hi,
I apologize if it is a rather stupid question, I am a newbie to LLVM.
I notice a inconsistency between the current llvm1.6 doc and its source code.
The doc states that the superclasses of GlobalVariable are GlobalValue, User, Value,
however in the source code GlobalVariable has Constant as its super.
I am just curious that why "variable" should be a subclass of "constant"?
GlobalVariable : GlobalValue: Constant: User: Value
So, GlobalVariable is a Constant indirectly through GlobalValue. This
change was made sometime after LLVM 1.5 and reflects the fact that all
GlobalValue's are, essentially, a constant address. Only after
derefercing with getelementptr is something obtained that is
(poentially) variable. Note that "Function" is a GlobalValue as well,
but you can't dereference it or modify what it points to. So, the
notion of a GlobalVariable being constant makes sense if you look at it
as a constant memory address. This hierarchy reduced a bunch of time-
consuming checks in LLVM passes, etc.
As for the documentation, I'll take a look. If its erroneous, it'll get
fixed with the 1.7 release.