PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Internal Compiler Error" beim Compilieren



ASUR0
24.04.2011, 17:40
Hallo,

während ich an einem Programm arbeitete, erschien beim Compilien ein seltsamer Fehler:



avr-gcc (WinAVR 20100110) 4.3.3
(...)
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test_bug.lst -save-temps test_bug.c -o test_bug.o
test_bug.c: In function 'main':
test_bug.c:15: internal compiler error: Illegal instruction
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=browse> for instructions.
make: *** [test_bug.o] Error 1


Ich habe das Programm auf das Minimum reduziert, beim dem der Fehler immer noch auftrat:



int main(void)
{

while (1)
{
unsigned char i;
for (i = 0 ;i < 10; i++)
{
}
}
return 0;
}


In einer Endlosschleife wird eine for-Schleife abgearbeitet, die eigentlich nichts tut. Anscheinend ist die Zeile i < 10 entscheidend: Wenn ich die weglasse, funktioniert es. Der Fehler tritt aber bei jeglicher Art von Vergleichen auf, auch (0==0) funktioniert nicht.

Der Fehler hat etwas mit der Optimierung zu tun: Wenn ich sie auf 0 stelle, klappt es. Bei allen anderen (1,2,3,s) tritt der Fehler auf.

Der Bugreport ist eingestellt, da kann man nichts mehr melden. Erstaunlicherweise funktionierte das Programm davor problemlos, mir ist auch nocht nie so ein Fehler aufgefallen.

Könnte jemand mal diesen Code bei sich ausprobieren, um zu schauen, ob ebenfalls dieser Fehler auftritt. Vorerst werde ich als Workaround die Optimierung deaktivieren...

Gruß
ASUR0

TobiKa
24.04.2011, 18:28
Und wenn du folgendes versuchst:



void main()
{
while (1)
{
for (unsigned char i = 0 ; i < 10; i++);
}
}

Besserwessi
24.04.2011, 21:50
Der gezeigte Fehler sollte normalerweise nicht auftreten. Das ist kein Fehler in dem C Programm, sondern ein Hinweis aus einen Fehler in GCC, der vermutlich relativ selten auftritt. Das Programm hier ist nur so, das da der Fehler in GCC(AVR) sichtbar wird.

Die Version von Winavr ist nicht mehr ganz neu, aber auch noch nicht so alt. Eventuell hilft es ja schon eine neuere Version von Winavr zu nehmen, weil der Fehler schon bereinigt wurde. Es kann auch ein Hinweiss auf eine nicht ganz korrekte Installation sein. Wenn der Fehler mit der neuen Version nicht mehr auftritt, erübrigt sich die Fehlermeldung.

Der Bugtracker scheint nicht mehr so wie früher zu funktionieren. Kann sein das es damit zu tun hat, dass WINAVR jetzt von ATMEL unterstützt wird.

ASUR0
25.04.2011, 07:34
Hallo,
so seltsam, wie der Fehler gekommen ist, so seltsam ist er auch wieder verschwunden.
Nach dem Hochfahren heute hat das Compilieren ohne Fehler geklappt...:confused::confused:

@TobiKa
Das ist so weit ich weiß C++ Syntax, in C führt das zu Compilerfehler

@Besserwessi
Ich habe gehört, dass WinAVR so nicht mehr weiterentwickelt wird. Meine Version ist schon die aktuellste.

Nun ja, da kann ich wohl weiterprogrammieren.
Trotzdem Danke für die Antworten.
ASUR0

SprinterSB
27.04.2011, 18:28
Hallo,
so seltsam, wie der Fehler gekommen ist, so seltsam ist er auch wieder verschwunden.
Nach dem Hochfahren heute hat das Compilieren ohne Fehler geklappt...:confused::confused:

Das ganze sieht nicht aus wie ein Fehler im Compiler, sondern so als habe irgendwas die ausführbaren Dateien von GCC oder Bibliotheken zerschossen. Vielleicht in memory-Leak in einem anderen Programm, das munter die GCC-Executables überschreibt.

Dafür spricht auch, daß der Fehler nach einem Neustart weg ist (GCC-Executables wurden neu in den Speicher geladen).