Ho visto codice di produzione corretto ma così complicato da confondere l'ottimizzatore in una produzione errata. Questo potrebbe essere il motivo per disattivare le ottimizzazioni.
Tuttavia, ritengo molto più probabile che il codice sia semplicemente buggato, con comportamento non definito. L'ottimizzatore lo espone e causa comportamenti o arresti anomali del runtime non corretti. Senza ottimizzazioni, il codice capita di "lavorare". E invece di trovare e rimuovere il problema sottostante, qualcuno lo ha "risolto" disabilitando le ottimizzazioni e lasciandolo lì.
Ovviamente, questo è il più delicato e si possono ottenere soluzioni alternative. Nuovo hardware, nuova patch del sistema operativo, nuova patch del compilatore, ognuno di questi può rompere una "correzione" del genere.
Anche se il pragma è lì per la prima ragione, dovrebbe essere molto documentato.
Forse il programmatore è piaciuto una traccia dello stack affidabile quando le bombe del programma. Forse ha cercato di aggirare un bug di ottimizzazione del codice. Forse non sapeva cosa stava facendo e ha applicato il culto del carico. –
Un altro motivo potrebbe essere quello di offuscare il risultato binario. Per rendere il reverse engineering più difficile (ovviamente se il codice sorgente è aperto questo è inutile). – freakish