Если у меня есть что-то подобное в моем коде:
void f(struct foo *x, struct foo *y)
{
*x = *y; // structure copy (memcpy?)
}
Если x и y указывают на один и тот же адрес , что происходит?
Это допустимокод, а что если компилятор преобразует присваивание в вызов memcpy с потенциально недопустимыми операндами (им нельзя перекрывать друг друга)?
[Да, я знаю, что в этом случае я могу использовать «restrict»,но фактический код, который мы нашли, заставил нас подумать, что он автоматически генерируется бизоном, поэтому мы задались вопросом, должен ли он всегда быть действительным, и должен ли компилятор использовать memmove или что-то еще, что допускает перекрытие ..]