Ответ 1
Да, он точно соблюдает контракт.
6.7.3 Типовые классификаторы
8 Объект, к которому осуществляется доступ с помощью
restrict
-qualified pointer, имеет специальную ассоциацию с этим указателем. Эта ассоциация, определенная в пункте 6.7.3.1 ниже, , требует, чтобы все обращения к этот объект прямо или косвенно использует значение этого конкретного указателя .135)использование ограничителя (например, класс хранения регистров) заключается в содействии оптимизация и удаление всех экземпляров квалификатора из всех преобразований предварительной обработки единицы, составляющие соответствующую программу, не меняют ее значения (т.е. наблюдаемого поведение).
Короче говоря, в точке foo
определен (функциональный вызов), foo
гарантирован программистом как единственный способ ссылаться на объекты (если они есть) это указывает на.
Таким образом, все остальные выражения, относящиеся к этому объекту, должны быть получены из этого значения указателей (например, bar
, которое установлено на foo+32
).
Нарушение веры, как всегда в таких случаях, должным образом наказывается поведением undefined.