Your line must be something like
array_name[i][k] = val
which looks innocent but is executed as
if <is not set>(array_name) || !is_array(array_name) array_name = [];
var tmp;
if (i >= array_length(array_name) || !is_array(array_name[i])) {
tmp = [];
array_name[@i] = tmp;
} else tmp = array_name[i];
tmp[@k] = val;
Changing it to array_name[@i][@k] = val; would fix it. Using legacy [i, k] syntax might also work since I had that hard-coded as an exception from usual rules before.
I intend to rewrite how GMLive handles this but it’s a moderate amount of work since you can similarly do map[?key][ind] = val, list[|i][k] = val, and so on, and it will store the freshly made array in the data structure in each case.