Modern compilers mostly generate branches to error sinks for
constructs they do not understand|understand as errors.

What are deleted are blocks of 'unreachable' code.  Executable source
statements are divided into what  have historically been called 'busy
blocks', defined as statement subsequences of maximal length such that
if the first statement in such a block is executed the others in it
are executed too.

A boolean matrix---0 for unconnected, 1 for connected---of first-level
connectivities from each block to each other one is then raised to an
appropriate power; blocks of code that cannot be reached either
directly or indirectly from other blocks are thus detected, and they
are deleted. nothing is compiled for them.  (No attempt is made to
delete these moot statements from source programs.)

It is hard to see how this operation done correctly can impair the
security of a module because it is hard to see how never executed
statements can enhance it.

Optimizations that move statements [that are redundantly executed many
times] out of loops can very occasionally be more problematic; but the
issues involved have been well studied, and I have not seen a 'bad'
operation of this sort  in a very long time.

John Gilmore, Ashland, MA 01721 - USA

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to