On Saturday, 1 December 2018 at 19:02:54 UTC, H. S. Teoh wrote:
In the above contrived example, Artin's conjecture is implied
by the Riemann hypothesis, so the second if statement would
only run if p is initialized. But there is no way the compiler
is going to be able to deduce this, especially not during
compile time. So it is not possible to correctly flag p as
being initialized or not when it is dereferenced.
Therefore, leaving it up to the compiler to detect
uninitialized variables is unreliable, and therefore any code
that depends on this cannot be trusted. Code like the above
could be exploited by a sufficiently sophisticated hack to make
the uninitialized value of p coincide with something that will
open a security hole, and the compiler would not be able to
reliably warn the programmer of this problem.
Uninitialized variables are *not* a good thing, contrary to
what the author of the article might wish to believe.
T
If a compiler were to issue warnings/error for uninitialized
variables. Then that example would be a compiler error. The logic
would just be that not all code paths lead to an initialized
variable, therefor *p++ is not guaranteed to be initialized -
i.e. error. Swift takes this approach.
Cheers,
- Ali