A typed intermediate representation of source code written in a language
that supports multiple inheritance is presented. The typed intermediate
representation uses paths to represent objects embedded in other objects.
For each class, an exact record type represents layout of complete
objects of that class. An approximated record type describes layout of
inner objects when the runtime types of the objects are statically
unknown. Address arithmetic is represented by special instructions and
type-checked to ensure proper pointer adjustment. Types are also given to
"this" pointers of methods within classes. These "this" pointer types
refer to the paths associated with the object.