Не понимаю а в чем проблема... динамических массивов нет, размеры известны на этапе компиляции, проверяй себе на здоровье....
Так не известны - у процедуры в параметрах ОТКРЫТЫЕ массивы, т.е. "безразмерные"
ну и что когда можно проверить - компайл - тайм ошибка (если вызов происходит в рамках модуля где определен фактический массив), иначе ран-тайм... абсолютно также вы не сможете определится во время компиляции и с банальным
arr:=m.arr (в секции загрузки основного модуля) если m.arr - определен в некотором модуле m (который вызывается динамически)
Я говорю о вполне конкретной ситуации - пусть есть процедура, у которой в качестве формальных параметров выступают открытые массивы
PROCEDURE( a, b : ARRAY OF CHAR);
BEGIN
a := b;
END;
в этом случае на этапе компиляции процудуры мы не сможем проверить допустимость присваивания т.к. фп - открытые массивы, т.е. их тип недоопределён в части размерности.
Также мы не сможем (по той же причине) проверить допустимость вызова процедуры с конкретными параметрами. Т.е. здесь сработает проверка только времени выполнения.
НО... к примеру, падение программы в этом случае, когда она выполняется на микроконтроллере, совершенно неверный подход, потому как может привести к непредсказуемым последствиям.
Поэтому в том же Активном Обероне и его предках выбрана другая стратегия - присваивания возможны всегда, но будет скопировано столько, сколько влезет в массив-приемник, без всяких трапов и остановов. И это правильная стратегия.