Hallo,
während ich an einem Programm arbeitete, erschien beim Compilien ein seltsamer Fehler:
Code:
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:
Code:
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
Lesezeichen