> From: Michael Veksler <[EMAIL PROTECTED]>
> In theory you could be right:
> ...
> Now, consider the case where the compiler can prove that
> is_debug_enabled(i) is always zero. So `a' is never initialized.
> Why can't the compiler assume that is_debug_verbose_enabled(i) is
> zero as well? By ignoring this optimization opportunity, you might
> get a much slower code (esp. in examples such as this).
- "subjectively", the only plausible alternatives to would seem to be:
- remove unreachable code; making no assumptions otherwise, or:
- presume otherwise un-initialized variables actually are by default.
(as you've suggested as a potential option)
- presume otherwise un-initialized variables and all code which they
are known to potentially indeterminately effect the controllability
and/or observably of are correspondingly removed from compilation;
leaving only that behavior which is portably deterministic. (rather
than introducing potentially a different non-deterministic behavior;
thereby the cited code would then pedantically compile to nothing)
> As someone who spent hours debugging in optimized assembly complex C++
> templates due to broken aliasing rules (my bug), I can attest that
> bad code with compiler transformations is a very bad combination. But
> in this case, you have a very shaky ground to stand on. For uninitialized
> objects, GCC generates a reasonable warning that catches most
> problems, and valgrind catches the other cases. Making GCC behave
> "better" on uninitialized objects will bring a marginal improvement
> to life of GCC users, with a non-trivial cost on GCC.
>
> If you really feel that strongly about it, you can try to submit a
> patch to C and C++ (cut and paste from g77 help):
> -finit-local-zero Initialize local vars and arrays to zero
- Thank you, I'll give it a try; although may attempt to name it:
-force-deterministic-semantics
presuming its longer term intent would be to warrant that some defined
default deterministic semantic is uniformly assumed for all otherwise
indeterminate behaviors throughout all levels of optimization; thereby
guaranteeing that a given program will behave logically the same
regardless of the level of optimizations applied to it.
> I would not be surprised if this is a matter of only a few dozens of
> lines to implement.
>
> --
> Michael