Да, блин, задача какая-то эпическая. Мало того, что вряд ли обойдётся без глобального исследования (т.е. изучать процедуры и их вызовы), так ещё и семантически проблемы возникают. Например, на сегодня SIZEOF(T) возвращает SIZE. Но ведь куча - это тоже объект в памяти, и он может занимать более половины диапазона адресов. Но тогда у неё получается отрицательный размер. Это то, что мы имеем на сегодня, и чтобы в этом разобраться, нужно изучать устройство диапазонов допустимых адресов на всех платформах.

Это я даже не говорю про исправление размера объекта, а про те проблемы, которые есть уже сейчас с типом SIZE. Если же речь идёт об исправлении, то мы заходим в тупик с таким невинным кодом:
## Код:
```
PROCEDURE sumOfElements(CONST arr: ARRAY OF CHAR);
VAR i: SIZE; VAR res : UNSIGNED64;
BEGIN
  res := 0;
  FOR i := 0 TO LEN(arr)-1 DO
    INC(res,ORD(arr[i])) END END sumOfElements
```

Т.е., нельзя иметь массив длиннее, чем MAX(INTEGER), и это только часть проблемы. Если мы попытаемся
превратить i в SIGNED32, то мы сломаемся на 64 разрядной платформе, если речь идёт о переборе объектов в памяти (например, если это алгоритм сборщика мусора). Но не только. Мы также сломаемся, если попытаемся создать строку размером более 2 или 4Гб (или сколько там получается?). А такие строки в природе можно себе представить - какие-нибудь базы данных в памяти вполне могут быть представлены как ARRAY OF CHAR.

Похоже, что решение этой задачи нужно дробить на много этапов, на каждом из которых придётся делать сколько-то ручной работы. Поэтому, видимо, нужно начать с того, чтобы изучить примерно следующее:
сколько есть массивов в 64-разрядных платформах, которые на практике могут иметь длину более MAX(SIGNED32) - это решается встраиванием отслеживания в оператор NEW (в простейшем случае ASSERT(size<MAX(SIGNED32)) - тогда программа сразу упадёт, когда столкнётся с такой ситуацией).сколько случаев, когда в место типа ADDRESS записывается значение типа SIZE (это можно попробовать сделать модификацией компилятора, хотя я не уверен, что это будет легко)С этими цифрами на руках можно попытаться понять, насколько достижима стратегия, при которой автоматически обрабатывается то, что возможно, а дальше ручной анализ и ручной рефакторинг.