Я писал функцию, чтобы выяснить, есть ли у данной системы линейных неравенств решение, как вдруг она начала давать неправильные ответы после, казалось бы, безобидного изменения.
Я отменил некоторые изменения, переделал их, а затем продолжил возиться в течение следующих двух часов, пока не довел это до абсурда.
Следующее, вставленное где угодно в теле функции, но нигде больше в программе, не исправляет:
if(0) {
__asm__("nop\n");
__asm__("nop\n");
__asm__("nop\n");
__asm__("nop\n");
}
Это для школьного задания, поэтому мне, вероятно, не стоит публиковать функцию в Интернете, но это настолько нелепо, что я не думаю, что какой-либо контекст вам поможет. И все, что делает функция, - это набор математических вычислений и циклов. Он даже не касается памяти, которая не выделена в стеке.
Пожалуйста, помогите мне разобраться в этом мире! Я не хочу списывать это на GCC, поскольку первое правило отладки - не винить компилятор. Но, черт возьми, я собираюсь. Я запускаю Mac OS 10.5 на башне G5, и рассматриваемый компилятор идентифицирует себя как «powerpc-apple-darwin9-gcc-4.0.1», но я думаю, что это мог быть самозванец ...
ОБНОВЛЕНИЕ: Все любопытнее и любопытнее ... Я сравнил файлы .s с nops и без них. Мало того, что слишком много различий, чтобы проверить, но и без nops файл .s имеет размер 196 620 байт, а с ним 156 719 байт. (!)
ОБНОВЛЕНИЕ 2: Вау, надо было выложить код! Я вернулся к коду сегодня свежим взглядом и сразу увидел ошибку. См. Мой робкий ответ ниже.