Since ES6, a new case has been added for rule 1 of automatic semicolon insertion:
The previous token is ) and the inserted semicolon would then be parsed as the terminating semicolon of a do-while statement (13.7.2).
This allows one to avoid line termination and write ugly code such as:
do {} while (false) var a = 42
What is the rationale behind this rule? Some useful use-case?