Abstract: Given a program Base and two variants, A and B, each
created by modifying separate copies of Base, the goal of program
integration is to determine whether the modifications interfere,
and if they do not, to create an integrated program that includes
both sets of changes as well as the portions of Base preserved in
both variants. Text-based integration techniques, such as the one
used by the Unix diff utility, are obviously unsatisfactory
because one has no guarantees about how the execution behavior of
the integrated program relates to the behaviors of Base, A, and B,
The first program-integration algorithm to provide such guarantees
was developed by Horwitz et al [13]. However, a limitation of
that algorithm is that it incorporates no notion of
semantics-preserving transformations. This limitation causes the
algorithm to be overly conservative in its definition of
interference. For example, if one variant changes the way a
computation is performed (without changing the values computed)
while the other variant adds code that uses the result of the
computation, the algorithm would classify those changes as
interfering. This paper describes a new integration algorithm that
is able to accommodate semantics-preserving transformations,