On 05/07/2014 02:43 PM, Richard Biener wrote:

The more challenging issue with early GIMPLE is that loops have already been
lowered to gotos, so adopting the syntax-based Java reachability rules is
impossible.  Oh dear.

Perfect is the enemy of the good (no false positives and no false
negatives).  I don't think you can get all you want starting at GIMPLE.
And the "earlier" you start the more you need to implement a whole compiler.

We already had an unreachable code warning at a later stage in the compiler. Its reporting was so confusing that it head to be removed. I don't think this approach works.

And you have of course to precisely define what you consider
"unreachable" (considering a global const bool debug = true/false; and
if (debug) guarded code - compared to using the preprocessor).

I plan to follow the Java rules, with necessary adjustments due to language differences:

<http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.21>

They are based on syntax (except for the infinite loop case), so they are much more predictable from a developer perspective.

There are other warnings which benefit greatly from information collected during optimization, but unreachable code doesn't.

--
Florian Weimer / Red Hat Product Security Team

Reply via email to