Оптимизатор g++ ругается на цикл

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

Оптимизатор g++ ругается на цикл

Сообщение BratSinot »

Доброго времени суток!

Есть такой тривиальный код:

Код: Выделить всё

    size_t cx = 0;

    while ( cx < 64 ) {
        bin[cx++] = '0';
    }

Собираем его g++ и он выдает следующую строчку:

Код: Выделить всё

warning: iteration 32ull invokes undefined behavior [-Waggressive-loop-optimizations]

Соотвественно если собирать с -O1 и ниже предупреждения нет, т.к. aggressive-loop-optimizations выключен.

Прошу извинить меня, это была моя ошибка, а точнее bin[] был [32].
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Оптимизатор g++ ругается на цикл

Сообщение drBatty »

BratSinot писал(а):
23.09.2013 10:08
Прошу извинить меня, это была моя ошибка, а точнее bin[] был [32].

да. Полюбуйтесь что получается:

Код: Выделить всё

08048370 <main>:
 8048370:   31 c0                   xor    eax,eax
 8048372:   8d b4 26 00 00 00 00    lea    esi,[esi+eiz*1+0x0]
 8048379:   8d bc 27 00 00 00 00    lea    edi,[edi+eiz*1+0x0]
 8048380:   40                      inc    eax
 8048381:   c7 04 85 bc 97 04 08    mov    DWORD PTR [eax*4+0x80497bc],0x30
 8048388:   30 00 00 00
 804838c:   83 f8 40                cmp    eax,0x40
 804838f:   75 ef                   jne    8048380 <main+0x10>
 8048391:   30 c0                   xor    al,al
 8048393:   c3                      ret

тут она агрессивно забивает символом '0' все 64 байтаint'а. ЛЮТО, БЕШЕНО.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: