By determining, statically, where the structure of a program requires sets of variables to share a common tation, we can identify abstract data types, detect ion violations, find unused variables, functions, and fields of data structures, detect simple errors in ns on abstract datatypes, and locate sites of possible references to a value. We compute representation sharing with type inference, using types to encode representations. The method is efficient, fully automatic, and smoothly integrates pointer aliasing and higher-order functions. We show how we used a prototype tool to answer a user’s questions about a 17,000 line program written in C. Keywords uring, abstraction, C, representation