------- Additional Comments From cnewbold at mathworks dot com  2005-06-20 
20:46 -------
Subject: Re:  Optimization stomps const,
        initialized local array

On Mon, 2005-06-20 at 20:39 +0000, pinskia at gcc dot gnu dot org wrote:

> I don't see the problem on the mainline, maybe I not understanding what you 
> mean.

The problem is that once we're past the initialization and into the body
of the block, the array does not have the correct content. In the
example I cited, the first byte of 'encrypted' does not contain 0xf3,
but instead some random trash. Here's a break down of the assembler for
the opening of that block:

First byte of 'encrypted' (correctly) loaded with 0xf3:
    2cab:       c6 85 08 ff ff ff f3    movb   $0xf3,0xffffff08(%ebp)

Something else dropped in here, which stomps the first element:
    2cb2:       ba 08 00 00 00          mov    $0x8,%edx
    2cb7:       b9 08 00 00 00          mov    $0x8,%ecx
    2cbc:       89 95 08 ff ff ff       mov    %edx,0xffffff08(%ebp)
                                               ^^^^^^^^^^^^^^^^
                                                  OOOPS!
    2cc2:       31 c0                   xor    %eax,%eax
    2cc4:       8d 55 b8                lea    0xffffffb8(%ebp),%edx
    2cc7:       89 8d 28 ff ff ff       mov    %ecx,0xffffff28(%ebp)
    2ccd:       8d 8d 30 ff ff ff       lea    0xffffff30(%ebp),%ecx

Remaining 23 bytes of 'encrypted' are loaded:
    2cd3:       c6 85 09 ff ff ff 09    movb   $0x9,0xffffff09(%ebp)
    2cda:       c6 85 0a ff ff ff 62    movb   $0x62,0xffffff0a(%ebp)
    ...

-Chris


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22129

Reply via email to