A newbie question about the class hierarchy

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"?


Hi Nai,

The hierarchy is like this:

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.

Thanks for pointing it out.



I improved the documentation with this patch:
You can read it online, here:

Please let me if you need further explanation in the documentation.



Thanks a lot for your clear explanation and update for the doc.
I think this design is neat. :slight_smile: