A generic approach to the static analysis of concurrent programs with procedures