  We present a new role system for specifying changing referencing
relationships of heap objects. The role of an object depends, in large part, on
its aliasing relationships with other objects, with the role of each object
changing as its aliasing relationships change. Roles therefore capture
important object and data structure properties and provide useful information
about how the actions of the program interact with these properties. Our role
system enables the programmer to specify the legal aliasing relationships that
define the set of roles that objects may play, the roles of procedure
parameters and object fields, and the role changes that procedures perform
while manipulating objects. We present an interprocedural, compositional, and
context-sensitive role analysis algorithm that verifies that a program respects
the role constraints.
