Location types in unification-based, flow-insensitive "points-to" analyses
represent three kinds of sets of abstract memory locations in a three-level subtyping
system. The data constructor for "middle" and "upper" kinds of location types has
a reader and a writer component. The "middle" kind of location types represent
singleton sets of abstract locations. The reader and writer components of the "middle"
type are both the same location type. The "upper" kind of location types represent
complex sets of abstract locations. The reader and writer components of the "upper"
type may be dissimilar location types. The reader components represent the set
of values that may be read from memory via a pointer represented by the location
type containing the reader component. The writer components represent the set of
values that may be written to memory via a pointer represented by the location
type containing the writer component.