За исключением размещения функции в ее собственном файле, я не думаю, что есть какой-либо способ отключить оптимизацию функции по уровням функции, используя более ранние версии GCC. Но вместо того, чтобы отключить оптимизацию для этой функции, вы можете попробовать отключить определенные типы оптимизаций во всей программе. Несмотря на то, что вы обнаружили ошибку в этой конкретной функции, это, вероятно, указывает на существование других необнаруженных ошибок.
Как отмечали другие, вполне вероятно, что виновником является оптимизация в отношении 'строгого алиасинга' . Хотя в долгосрочной перспективе вам, вероятно, следует исправить рассматриваемый код, в краткосрочной перспективе вы можете поиграть с добавлением «-fno-strict-aliasing» в командной строке. При -O2 и выше компилятор делает определенные предположения о взаимодействии между указателями. Добавление этой опции говорит не делать эти предположения.
Если это не помогло, и если по какой-то причине код не может быть исправлен, вы можете попробовать отключить другие опции оптимизации .