Bug im GCC ?

OP #1955198
Lesenswert?

Hallo Forum,

ich nutze den GCC aus Codesourcery Lite um meine Software für den STM32 
ARM-Prozessor zu übersetzen. Ich wollte jetzt auf die aktuelle Version 
umsteigen und diese wirft mir einem Fehler im Assembler vor.
Kennt jemand fogendes Verhalten und ist es mein Fehler oder ein Problem 
im GCC?
1
typedef union {
2
  unsigned long int D;   /*32Bit unsigned*/
3
  struct{
4
    unsigned short int _1; /*16Bit unsigned*/
5
    unsigned short int _0;  
6
  }W;
7
} tu_myVar; 
8

9

10
void MyFunction(void)
11
{
12
  tu_myVar my_StackVar;
13
  my_StackVar.W._0 = 0x8000;
14
  ...
15
  some code here
16
  ...
17
}
Der Assembler wirft mir an der Stelle "my_StackVar.W._0 = 0x8000;" 
folgendes vor:
C:\DOKUME~1\foo\LOKALE~1\Temp\ccbvl0ak.s: Assembler messages:
C:\DOKUME~1\foo\LOKALE~1\Temp\ccbvl0ak.s:574: Error: immediate value out 
of range -- `movt r4,-32768'
Ein Warning kommt nicht.

Das sieht für mich aus wie ein Vorzeichenproblem. Und das stimmt auch: 
mit 0x7FFFF funktioniert das ganze. Liegt die Variable nicht auf dem 
Stack funktioniert das auch.
Mache ich was falsch oder ist das wirklich in Bug im GCC?

hier noch die Parameter:
gcc version 4.5.1 (Sourcery G++ Lite 2010.09-51) (4.3.3 hat 
funktioniert)

Vielen Dank
Rangi
Gast #1955336
Lesenswert?

Ich würde sagen, das ist ein Bug. Der Compiler sollte von sich aus 
nichts erzeugen, was im Assembler einen Fehler erzeugt.

Interessant wäre vielleicht noch was passiert, wenn man eine unsigned 
Konstante vorgibt (also "0x8000u"). Aber an sich ist das ein Bugreport 
wert.
Gast #1955342
Lesenswert?

Was passiert, wenn du an die 0x8000 ein U ranhängst? also 0x8000U
alternativ fehler umgehen mit Const-Variable. wenns dann nicht klappt 
isses komisch.
andere möglichkeit:
"some code here" ist richtig viel code.. wenn JA, dann kann es sein, 
dass der prozessor nicht mehr PC-Relativ adressieren kann und dann kann 
es auch zu sonem scheiß kommen, da die konstanten ja gerne mal hinter 
dem Funktions Code liegen...
Ich kenne mich damit nicht konkret aus, wenn ich Grütze erzähle, nicht 
böse sein.
#1955356
Lesenswert?

Völlig egal was man im Quellcode hinschreibt, ein solcher 
Assembler-Fehler darf nicht auftreten. Zumal der Quellcode ok ist. Sieht 
wirklich nach einem Compilerbug aus.

Such mal http://gcc.gnu.org/bugzilla ob der nicht schon drinsteht.

Wenn nicht: Bau einen minimalisierten Quellcode, der keine Zeile mehr 
enthält als für die Reproduktion des Fehler absolut notwendig ist. Dann 
ab damit nach Bugzilla.

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