(line-move-to-column) has a loop that can become infinite: (while (and ...) (goto-char (previous-char-property-change (point) line-beg))) If (= (point) line-beg) then the (goto-char) does nothing, and the condition in the while never changes. This patch adds a check to break out of the while when this happens: (while (and ... (/= (point) line-beg)) (goto-char (previous-char-property-change (point) line-beg))) I'm seeing this in the wild with ERC and erc-fill-mode disabled. Simply moving around an ERC buffer can hit this.