Wir haben kürzlich die GCC-Versionen (4.8.2 bis 5.3.0) aktualisiert und haben in einigen Ada-Anwendungen unerwartete Constraint-Fehler erhalten. Ich habe es auf das folgende reduziert:Unerwarteter CONSTRAINT_ERROR nach GCC-Update
-- moo.adb
with text_io;
procedure moo is
type thing_type is (something1,something2,something3,something4,something5,something6);
for thing_type use (something1 => 1,something2 => 2,something3 =>
3,something4 => 4,something5 => 5,something6 => 6);
for thing_type'size use 32;
type thing_array_t is array (0 .. 5) of thing_type;
thing_array : thing_array_t := (others => something1);
begin
text_io.put_line("item 0 = " & thing_type'image(thing_array(0)));
end moo;
Dieses Programm entweder auf GCC-Version nur übersetzt werden können (einfach zusammengestellt mit „gnatmake moo.adb“). Wenn mit 4.8.2 gebaut, wird die Ausgabe wie erwartet :
item 0 = SOMETHING1
wenn mit 5.0.3 gebaut, erhalten wir statt
raised CONSTRAINT_ERROR : moo.adb:13 invalid data
Interessanterweise weise~~POS=HEADCOMP sind die Ergebnisse genau das gleiche, wenn es als 32- und 64-Bit kompiliert. Viele Dinge können geändert werden, damit das Programm mit 5.3.0 funktioniert: Entfernen der thing_type'size-Klausel, Hinzufügen oder Entfernen von Werten zum Enumerator, Ändern der Anzahl der Elemente im Array, Verwenden eines anderen Werts für die Initialisierung des Arrays, etc Gibt es offensichtliche Probleme mit diesem Code, die dieses Verhalten erklären könnten?
Was 13 on line? (Ihr Eintrag hat nur 12 Zeilen.) –
Entschuldigung, ich entfernte einige leere Zeilen aus dem Original, als ich es eingefügt habe. Zeile 13 ist die Zeile text_io. – Kevin