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