Как это неработает. Реальный случай, аналогичный твоему: Была написана программа (с клюком, как выяснилось потом), работала она как полагается, никаких внешних глюков не наблюдалось. Вставили в программу маленьний кусок кода, и начались глюки, не имеющие никакого отношения к вставляемому куску кода. Если конкретно, была задача обмена с флешь-памятью по SPI и задача обмена по каналу связи (IrDA). IrDA стала глючить - вставляешь кусок кода (который не имеет к этой задаче никакого отношения) - глючит. Убираешь кусок кода - работает.
Оказалось - задача обмена по SPI была с глючком. Принимаемые по SPI данные клались в буфер(массив), но из-за ошибки в программе клались(и читались) они со сдвигом в 1 байт - и вылезали за пределы массива на 1 байт. Что они при этом портили - одному богу линкеру известно. Но стоило добавить маленький фрагмент кода, и карта памяти после линковки изменилась, и под порчу попала очень важная переменная для задачи IrDA. И тайное стало явным.
Вот так оно бывает :-)