Well, I'm not a C language lawyer myself, so I'm merely going off of what I have heard from people who are, but consider the following C function:
bool f(int *restrict a, int *b, bool should_modify) {
if (should_modify) {
*a = b;
}
return a == b;
}
Does this function have defined behavior? It turns out that the C spec says that the aliasing restrictions imposed by `restrict` only apply if the memory object pointed to by the restricted pointer has an intervening modification in the scope of the `restrict`; otherwise, the pointers are allowed to alias. Therefore, this function does not have defined behavior for all inputs. If a and b point to valid memory objects and a != b, then the behavior of f is defined regardless of the value of should_modify. If a == b, then f only has defined behavior if should_modify is false.
Yes, this is arguably insane, but it's also the spec.
Yes, this is arguably insane, but it's also the spec.