コードに次のようなものがある場合:
void f(struct foo *x, struct foo *y)
{
*x = *y; // structure copy (memcpy?)
}
x と y が同じアドレスを指している場合、どうなりますか?
これは有効なコードですか? また、コンパイラが代入を、潜在的に無効なオペランドを含む memcpy 呼び出しに変換するとどうなりますか (オーバーラップは許可されません)。
[はい、この場合「restrict」を使用できることはわかっていますが、これを考慮した実際のコードは bison によって自動的に生成されたものであるため、常に有効である必要があるかどうか、およびコンパイラが memmove を使用するか、オーバーラップを許可する他の何か..]