Automatische Code-Optimierung durch den GNU Compiler bzw. die Optimierung / der Compiler spinnen



  • Hallo, Leute. Ich habe bei mir auf dem Rechner Suse Linux 10.2 installiert. Die gcc-Version ist 4.1.2 20061115 (prerelease) (SUSE Linux).

    Ich schreibe ein Programm in C++ und kompiliere es mit der Option -o2 im Makefile. Nun habe ich entdeckt, dass der Compiler dann irgendwelchen ganz komischen Kram macht. Ich habe das Gefühl, dass er mir da etwas wegoptimiert. Auf jeden Fall fängt mein Programm rumzuspinnen bzw. zu hängen an, wenn ich es mit -o2 kompiliere. Ich habe die Zeilen lokalisiert, wo der Fehler auftritt und mit dem GNU-Debugger durchgestept. Dabei habe ich entdeckt, dass das Programm plötzlich Funktionen ausführt und Aufrufe tätigt, wie es überhaupt von mir nicht programmiert wurde! Also die Funktionen sind schon von mir programmiert, aber die werden ganz anderswo aufgerufen: in anderer Reihenfolge, an anderer Stelle usw. Und natürlich kommt dann nur Mist raus, bzw. das Programm landet bei mir in einer Endlosschleife.

    Wenn ich dasselbe Programm mit -o0 kompiliere ist alles OK. Es läuft ausgezeichnet und fehlerfrei.

    Ich verstehe es echt nicht. Hat jemand hier schon mit sowas zu tun gehabt? Was treibt der Compiler denn??? Und kann man etwas dagegen machen? Wäre echt für jeden Ratschlag dankbar.

    Viele Grüsse
    Ewgenij



  • Kannst du deinen Code auf ein Minimalbeispiel reduzieren, bei dem der Fehler auftritt? Ein Minimalbeispiel, dass fuer sich alleine kompilierbar ist, ohne weitere Abhaengigkeiten.

    Der Compiler ist sicher nicht fehlerfrei, aber die Wahrscheinlichkeit, dass du auf einen Fehler im Optimierer gestossen bist, halte ich doch eher fuer gering. Wahrscheinlich benutzt du in deinem Code nicht initialisierte Variablen oder hast andere Fluechtigkeitsfehler gemacht, die erst bei optimiertem Code zum Vorschein kommen.


Anmelden zum Antworten