Kenneth Zadeck <zadeck@naturalbridge.com> wrote:
Also, it would seem to me that Ada and Java probably have upcast, and
that the back end has to work for them too... I just don't know if
they would trip over it.
At least for java, there is a lot of structure that keep things easy to
understand. For one the upcasting is allowed specificly in the context
of the class heirarchy. This is different from just taking any field
that happens to be in a record and recovering a reference to the
record. With respect to the gcc implementation, or analysis always
assumed that if you had a pointer to field, you also had a pointer to
every kind of object you could get by chaining thru the TYPE_BINFO
structure.
Notice that exactly the same holds true in C++ for non-POD classes (which
usually are most of the classes in a given translation unit), because
offsetof is only allowed for POD types. Also, non-PODness is viral, which
means that if you embed a non-POD into a structure, you get a non-POD.