Effects of Pointers on Data Dependences.


Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunately, data dependences are difficult to compute and understand in the presence of commonly-used language features such as pointers, arrays, and structures. To facilitate the comprehension of data dependences in programs that use such features, we define a technique for computing and classifying data dependences that takes into account the complexities introduced by specific language constructs. The classification that we present is finer-grained than previously proposed classification. Moreover, unlike previous work, we present empirical results that illustrate the distribution of data dependences for a set of C subjects. We also present a potential application for the proposed classification: program slicing. We propose a technique that allows for computing slices based on data-dependence types. This technique facilitates the use of slicing for understanding a program because a user can either incrementally augment a slice by incorporating data dependences based on their relevance, or focus on specific kinds of dependences. Finally, we present a case study that shows how the incremental computation of slices can (1) highlight subtle data dependences within a program, and (2) provide useful information about those dependences.

Related research categories:
(1) Program Analysis
(2) Empirical Studies
(3) Data Flow
(4) Pointer Analysis
(5) Slicing

Go To Publications