Nous avons récemment mis à jour les versions de GCC (4.8.2 à 5.3.0) et commencé à recevoir des erreurs de contraintes inattendues dans certaines applications Ada. Je l'ai réduit à ce qui suit:CONSTRAINT_ERROR inattendu après la mise à jour de GCC
-- 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;
Ce programme compilera très bien sur les deux versions de GCC (simplement compilé avec « gnatmake moo.adb ».) Une fois construit avec 4.8.2, la sortie est comme prévu :
item 0 = SOMETHING1
Une fois construit avec 5.0.3, nous recevons à la place
raised CONSTRAINT_ERROR : moo.adb:13 invalid data
Fait intéressant, les résultats sont exactement les mêmes que lors de la compilation 32 et 64 bits. Beaucoup de choses peuvent être modifiées pour que le programme fonctionne correctement avec 5.3.0: supprimer la clause thing_type'size, ajouter ou supprimer des valeurs dans l'énumérateur, changer le nombre d'éléments dans le tableau, utiliser une valeur différente pour initialiser le tableau, etc. Y at-il des problèmes évidents avec ce code qui pourrait expliquer ce comportement?
Quelle est la ligne 13? (Votre liste ne contient que 12 lignes.) –
Désolé, j'ai supprimé des lignes vides de l'original lorsque je l'ai collé. La ligne 13 est la ligne text_io. – Kevin