Ориентировочно бага появилась 4 года назад в gcc 4.5 или 4.6 и существует по сей день (4.9). Версия 4.4 ее не содержит и именно эта версия поставляется в RHEL.
Суть: при включенной оптимизации
-O2 или
-O3 происходит нарушение механизма обработки исключений. Исключения могут ловиться, а могут не ловиться.
Источник баги: опция оптимизатора
-freorder-blocks-and-partition. Она входит в состав
-O2 и
-O3.
Лечение:
gcc -O2 -fno-reorder-blocks -fno-reorder-blocks-and-partition ...
Что характерно, в мане сказано, что
-freorder-blocks-and-partition автоматически отключается при использовании исключений. Видимо автомат покорежен.