g ++ строгое переполнение, оптимизация и предупреждения

При компиляции следующего с флагом строгого переполнения он говорит мне, во 2-м тесте, что r может быть не тем, что я думаю:

    int32_t r(my_rand());
    if(r < 0) {
        r = -r;
        if(r < 0) {   // <-- error on this line
            r = 0;
        }
    }

Ошибка:

/build/buildd/libqtcassandra-0.5.5/tests/cassandra_value.cpp:
     In function 'int main(int, char**)':
/build/buildd/libqtcassandra-0.5.5/tests/cassandra_value.cpp:2341:13:
     error: assuming signed overflow does not occur when simplifying
     conditional to constant [-Werror=strict-overflow]
         if(r < 0) {
         ^

Чего я не понимаю, так это почему бы не сгенерировать ошибку на линии до этого? Потому что на самом деле переполнение происходит, когда я делаю это, верно?

    r = -r;

Ответы на вопрос(1)

Ваш ответ на вопрос