Quais são as regras para inserção automática de ponto e vírgula (ASI) do JavaScript?

Bem, primeiro eu provavelmente deveria perguntar se isso depende do navegador. Eu li que, se um token inválido for encontrado, mas a seção de código for válida até esse token inválido, um ponto-e-vírgula será inserido antes do token, se for precedido por uma quebra de linha. No entanto, o exemplo...