Isso é um problema com o ASI ou apenas com a gramática de retorno?

As pessoas costumam falar sobre o desagradável ASI (inserção automática de ponto e vírgula) do JavaScript, e frequentemente citameste exemplo...

function a() {
    return [
        'a',
        'b',
        'c'
    ];
}

function b() {
    return
    [
        'a',
        'b',
        'c'
    ];
}

console.log(a(), b());
// ["a", "b", "c"] undefined

Existe realmente um ponto e vírgula sendo inserido apósreturn nob(), ou a gramática JavaScript declara que o valor de retorno deve ser explicitamente declarado após ele (ou seja, não\n)?