checking and inferring local non-aliasing
In prior work [15] we studied a language construct  restrict  that allows programmers to specify that certain pointers are not aliased to other pointers used within a lexical scope. Among other applications, programming with these constructs helps program analysis tools locally recover strong updates, which can improve the tracking of state in flow-sensitive analyses. In this paper we continue the study of  restrict  and introduce the construct  confine . We present a type and effect system for checking the correctness of these annotations, and we develop efficient constraint-based algorithms implementing these type checking systems. To make it easier to use  restrict  and  confine  in practice, we show how to automatically infer such annotations without programmer assistance. In experiments on locking in 589 Linux device drivers,  confine  inference can automatically recover strong updates to eliminate 95\% of the type errors resulting from weak updates.
inference locality aliasing language restrict program programmer pointers use applications program analysis tools update tracking flow-sensitivity paper confine types effect systems correctness annotation efficiency algorithm practical experience locking device driver errors sensitive constraints type qualifiers effect inference alias analysis linux kernel flow