Я писал функцию, чтобы выяснить, есть ли решение у данной системы линейных неравенств, когда она неожиданно начала давать неправильные ответы после, казалось бы, безобидного изменения.
Я отменил некоторые изменения, заново сделал их, а затем продолжил играть на скрипке в течение следующих двух часов, пока не довел их до абсурда.
Следующее, вставленное где-либо в тело функции, но нигде в программе, исправляет это:
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', но я думаю, что это может быть самозванцем ...
ОБНОВЛЕНИЕ: Curiouser и curiouser ... Я отправил файлы .s с nops и без. Не только слишком много различий, которые нужно проверить, но и без каких-либо проблем файл .s имеет размер 196 620 байт, а также 156 719 байт. (!)
ОБНОВЛЕНИЕ 2: Ух ты, должен был выложить код! Я вернулся к коду сегодня свежим взглядом и сразу увидел ошибку. Смотрите мой зову себя ответ ниже.