Thanks for the latest replies.
The whole point is that it was only a change of compiler from v6 to v8.1 that highlighted the problem and not the change of code with v8.1.
Only now, when reading up the definition of /ZERO, is it a puzzle that v6 worked at all, ie that local variables must have been getting initialised, because they should not have done so according to the documentation. The places we have found wanting in v8.1 so far, on a revisit to v6 worked fine.
If /ZERO has not changed, as Paul points out, this suggests that something else in the v6 compiler must be doing the initialisation : what other explanation is there ?
Certainly, amending the 'old' code to initialiase the offending variables with v8.1 works fine. We appreciate Paul's advice in attempting to identify these places in the 'old' code, but this would be a massive undertaking at the moment. We shall definitely need to do plenty of testing.
But I would like to re-emphasize the /LO option. Using it did not overcome the problem ! as I said before, with such a big overhead due to product size, it does seem to be a restrictive option.