The explosive growth in data-centric artificial intelligence related applications necessitates a radical departure from traditional von Neumann computing systems, which involve separate processing and memory units. Computational memory is one such approach where certain tasks are performed in place in the memory itself. This is enabled by the physical attributes and state dynamics of the memory devices. Naturally, memory plays a central role in this computing paradigm for which emerging post-CMOS, non-volatile memory devices based on resistance-based information storage are particularly well suited. Phase-change memory is arguably the most advanced resistive memory technology and in this article we present a comprehensive review of in-memory computing using phase-change memory devices.