int[10] tbl;
int[] p = tbl;
return p; // 通るがpを参照した場合は未定義動作

これが通るのは
コンパイラから手出しできなくてしょうがないにしても

return tbl; // エラー
return tbl[0..5]; // 通るが未定義動作

これのふるまいが違うってのは直感に反する

ソース見たけど実際にエラーではじいてる部分も変化球投げてて
バグの温床に見えた

いっそのことスタックに置くのを廃s(ry