compcert - определенное поведение доступа к объединению
В руководстве CompCert указано в §6.5.2.
Если доступ к члену объекта объединения осуществляется после того, как значение было сохранено в другом члене объекта, поведение будет таким, как описано в последнем абзаце выше: операция хорошо определена, пока она не влечет за собой доступ к хранимому указателю. значение с типом, отличным от типа указателя, или целочисленным типом того же размера, что и тип указателя. Например, заявление...
union u { double d; unsigned int i[2]; unsigned char c[8]; };
...поддерживает доступ к любому члену после сохранения любого другого члена.
Итак, я понимаю, что в этом примере
fprint
ing после сохранения определяется поведением. Но я до сих пор понятия не имею, что это за поведение на самом деле. Будет ли он просто сохранять байтовое представление
u.d
но попробуйте отобразить его содержимое как
u.c
тип? Это случится
null
? Будет ли компилятор оптимизировать его, как при делении на ноль?