bitte Hilfe, interner Compiler Fehler

#3350609
Lesenswert?

Beim Compilieren von Hit1270.c kommt bei mir ein interner Compiler 
Fehler, wenn ich als Optimierung "o3" wähle. Mit Optimierung "os" ist 
die Welt in Ordnung.

Umgebung: WindowsXP, AVR Studio 4, aktuelles WinAVR (GCC 4.3.3).
Der Fehler kommt aber auch, wenn ich dem WinAVR einen GCC 4.7.2 unter 
schiebe. Als CPU ist ATMega1284 gewählt.

../Hit1270.c:97: error: unrecognizable insn:
(insn 9 8 10 3 ../Hit1270.c:80 (set (reg:HI 18 r18)
        (reg:SI 121)) -1 (nil))
../Hit1270.c:97: internal compiler error: in extract_insn, at 
recog.c:2048

Ich würde mich freuen, wenn noch jemand versuchen würde, das Programm zu 
übersetzen und Erfolg/Misserfolg hier melden würde, damit die 
Fehlerursache eingegrenzt werden kann.

Vielen Dank im Voraus,
Georg.
Angehängte Dateien:
Moderator Persönliche Seite #3351192
Lesenswert?

Just for the record (hatte mit Georg bereits vorher gemailt): ich kann
es auf einem GCC 4.5.1 und 4.7.2 unter FreeBSD bzw. Linux nicht
reproduzieren.

Ein interner Compilerfehler sollte natürlich nie passieren. 
Andererseits
ist es seltsam, warum er nur bei der Windows-Version auftreten sollte.
Ohne einen reproduzierbaren Fehler ist es aber nicht praktikabel, dass
Georg einen PR bei GCC einreicht, daher nochmal die Bitte an andere,
seinen Test nachzuvollziehen.
Persönliche Seite #3351330
Lesenswert?

Mit welchen Optionen bitte?

Mein "gcc version 4.3.3 (WinAVR 20100110)" kennt kein ATmega1284, ditto 
für die offiziellen 4.7 und 4.8.

Und mit 4.7.2-1573 von Atmel compiliert es ganz normal (Win2000):

$ avr-gcc hit1270.c -mmcu=atmega1284 -O3 -S
In file included from hit1270.c:9:0:
./avr/include/util/delay.h:90:3: warning: #warning "F_CPU not defined 
for <util/delay.h>" [-Wcpp]
Moderator Persönliche Seite #3351560
Lesenswert?

Johann L. schrieb:
> Der ICE sieht mir eher nach zerschossenem Speicher oder einer kaputten
> Installation aus.

Das erklärt natürlich irgendwie die "Selektivität", wenngleich es
dann immer noch verwundert, warum Georg das Problem mit zwei
verschiedenen Compilerversionen bekommt.

./. schrieb:
> Vielleicht laeuft der Compiler auf einem alten Pentium.

Albern.  Der blöde FDIV-Bug war zwar real, aber praktisch kaum
relevant.  Für einen Compiler schon gar nicht.  Der F00F-Bug wiederum
hätte ganz gewiss nicht zu einem internal compiler error geführt …
Moderator Persönliche Seite #3351969
Lesenswert?

Jörg Wunsch schrieb:
> Das erklärt natürlich irgendwie die "Selektivität", wenngleich es
> dann immer noch verwundert, warum Georg das Problem mit zwei
> verschiedenen Compilerversionen bekommt.

Vielleicht hat Georg ja beim "WinAVR-Unterschieben" (so wie er das oben 
nennt) des gcc-4.7.2 einen Fehler gemacht und damit beide Versionen 
miteinander derart vermischt, dass beide nicht mehr laufen.

Georg sollte mal erklären, wie er das mit dem Compiler-Austausch 
bewerkstelligt hat.
#3352042
Lesenswert?

Nur kurz, später am Tag ausführlicher:
Der Rechner ist ein Dual Core E5300 mit 4GB RAM. Den Pentium Bug kann 
man also ausschliessen.

Speicherfehler sind unwahrscheinlich, wenn der Fehler an mehreren Tagen 
auftritt. Der Compiler läuft nicht immer an den gleichen Adressen.

Der Fehler tritt reproduzierbar auf mit WinAVR-GCC 4.3.3 und zwar nur 
mit "o0" bis "o3", nicht mit "os".

Das "Unterschieben" wird auf den Seiten der 4.7.2-mingw32 Version sehr 
gut beschrieben. Und damit man gefahrlos zurück kann, gibt es ab XP die 
Möglichkeit, den Systemzustand einzufrieren und wieder her zu stellen.

Man kann auch ohne Probleme beide Compiler Versionen in getrennten 
Verzeichnissen installieren und dann von der Eingabeaufforderung aus das 
Makefile aufrufen.

Ich werde heute Abend mal alles auf dem Rechner der Ehefrau installieren 
und dort testen. Momentan bin ich ratlos.
#3352289
Lesenswert?

Ich habe hier gerade einen GCC-4.3.3 unter Cygwin am laufen.
1
$ avr-gcc --version
2
avr-gcc (Memsic 20120521) 4.3.3
3
Copyright (C) 2008 Free Software Foundation, Inc.
4
This is free software; see the source for copying conditions.  There is NO
5
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Wenn ich das wie folgt kompiliere, dann entsteht kein interner Compiler 
Fehler. Die Optionen habe ich oben aus Jörg seinem Posting.
1
$ avr-gcc hit1270.c -mmcu=atmega1284p -O3 -S -Wall -gdwarf-2 -std=gnu99 -save-temps -DF_CPU=16000000UL -funsigned-char
2
-funsigned-bitfields -fpack-struct -fshort-enums
3
hit1270.c: In function 'cmd_write':
4
hit1270.c:41: error: 'PD4' undeclared (first use in this function)
5
hit1270.c:41: error: (Each undeclared identifier is reported only once
6
hit1270.c:41: error: for each function it appears in.)
7
hit1270.c:42: error: 'PD2' undeclared (first use in this function)
8
hit1270.c:42: error: 'PD5' undeclared (first use in this function)
9
hit1270.c:44: error: 'PD6' undeclared (first use in this function)
10
hit1270.c: In function 'data_write':
11
hit1270.c:55: error: 'PD4' undeclared (first use in this function)
12
hit1270.c:56: error: 'PD5' undeclared (first use in this function)
13
hit1270.c:57: error: 'PD2' undeclared (first use in this function)
14
hit1270.c:59: error: 'PD6' undeclared (first use in this function)
#3352430
Lesenswert?

Er findet das include. Sonst würde er meckern, dass er das Include nicht 
findet. Ich habe es auch ausprobiert.

Kompilieren mit MCU am Anfang sieht genauso aus wie oben.
1
$ avr-gcc -mmcu=atmega1284p hit1270.c -O3 -S -Wall -gdwarf-2 -std=gnu99 -save-temps -DF_CPU=16000000UL -funsigned-char
2
-funsigned-bitfields -fpack-struct -fshort-enums
3
hit1270.c: In function 'cmd_write':
4
hit1270.c:41: error: 'PD4' undeclared (first use in this function)
5
hit1270.c:41: error: (Each undeclared identifier is reported only once
6
hit1270.c:41: error: for each function it appears in.)
7
hit1270.c:42: error: 'PD2' undeclared (first use in this function)
8
hit1270.c:42: error: 'PD5' undeclared (first use in this function)
9
hit1270.c:44: error: 'PD6' undeclared (first use in this function)
10
hit1270.c: In function 'data_write':
11
hit1270.c:55: error: 'PD4' undeclared (first use in this function)
12
hit1270.c:56: error: 'PD5' undeclared (first use in this function)
13
hit1270.c:57: error: 'PD2' undeclared (first use in this function)
14
hit1270.c:59: error: 'PD6' undeclared (first use in this function)

Ich habe gerade mal in den Headerfile iom1284p.h gesehen. Die Pins 
heißen alle PORTD4 und nicht PD4. Im File iom16.h steht wiederum PD4. 
Das ist ja auch merkwürdig. Ist da ein Mischmasch gebaut worden bei dem 
GCC hier? Aber das wird jetzt OT.
#3352501
Lesenswert?

Jörg Wunsch schrieb:
>
> Versuch doch, seine .i-Datei zu compilieren.

Siehe unten:
1
$ avr-gcc -mmcu=atmega1284p hit1270.i -O3 -S -Wall -gdwarf-2 -std=gnu99 -save-temps -DF_CPU=16000000UL -funsigned-char
2
-funsigned-bitfields -fpack-struct -fshort-enums
3
../Hit1270.c:22: warning: 'txt_color' defined but not used
4
../Hit1270.c:23: warning: 'chapos' defined but not used
#3352850
Lesenswert?

Allen einen herzlichen Dank für die Anregungen. Der Übeltäter ist 
gefunden.

Ich hatte mal die AVR-Toolchain installiert. Die hat offensichtlich 
einiges zerwürfelt. Nach Deinstallation ist der Fehler nun verschwunden.

Nun muss ich nur noch Win-AVR davon überzeugen, auch am Ende des Make 
den Speicherverbrauch zu melden. Es wird wohl darauf hinauslaufen, alles 
komplett neu zu installieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren