Гм. А как на счет вот такого примера:
MODULE M;
TYPE
R = RECORD foo* : INTEGER END;
P* = POINTER TO R;
END M.
Репорт:
6.3 Record types
...
If a record type is exported, field identifiers that are to be visible outside the declaring module must
be marked.
Т.е., если тип-запись не экспортируется, то его поля не должны экспортироваться.
Ну, если строго логически подходить к данному пункту, то это не так - тут сказано лишь, что если тип записи экспортируется, то все поля которые должны быть видимыми за пределеми модуля нужно промаркировать звездочкой. Однако тут не разобран случай когда тип записи не экспортируется.
Соответственно я вижу тут две возможности (и нам надо выбрать одну из них)
1) Такая ситуация, как приведенном мное исходнике, является ошибочной, и мы должны получить ошибку компиляции (с указанием на то, что сам тип записи не экспортируется).
2) Такая ситуация не ошибочна, и мы к полям записи можем получить доступ через указатель, но при этом экземпляры записи вне данного модуля создавать не можем.