Обычно мы компилируем с помощью -O2, потому что -O3 будет "запускать тонкие ошибки".
Для нашей версии GCC -O3 допускается более агрессивная инкрустация, которая на самом деле обнаруживает ошибки, которые были бы незаметны (например, использование неинициализированных значений из функций, принимающих их в качестве эталонных аргументов или внеочередного доступа для массивов). Мне кажется, что эта агрессивная вставка также позволяет более выразительный способ кодирования с меньшими функциями, а -funswitch-loops помогает сохранять определения переменных более локальными в циклах.
Учитывая, что ошибки в нашем коде на порядок более вероятны, чем ошибки компилятора, и что мы используем -Wall -Wextra без каких-либо проблем, какие ошибки мы должны искать?
Если это имеет значение, мы используем gcc-4.3.2. Время компиляции для нас не является серьезной проблемой.