diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2023-01-26 18:16:14 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2023-09-27 10:16:24 +0200 |
commit | f1e55a443e28f4e88e83ce04ac2dc0966dc787a1 (patch) | |
tree | 0825e41d7fd1f7105f6af1933eed9a74d2cb61f3 /gcc | |
parent | a5c70fc77a71a1b5dc5ace0129da9e361acb79e3 (diff) | |
download | gcc-f1e55a443e28f4e88e83ce04ac2dc0966dc787a1.zip gcc-f1e55a443e28f4e88e83ce04ac2dc0966dc787a1.tar.gz gcc-f1e55a443e28f4e88e83ce04ac2dc0966dc787a1.tar.bz2 |
ada: Fix internal error on 'Image applied to array component
This happens because the array component depends on a discriminant.
gcc/ada/
* exp_imgv.adb (Rewrite_Object_Image): If the prefix is a component
that depends on a discriminant, create an actual subtype for it.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/exp_imgv.adb | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb index 93fdb70..257f65b 100644 --- a/gcc/ada/exp_imgv.adb +++ b/gcc/ada/exp_imgv.adb @@ -2498,12 +2498,31 @@ package body Exp_Imgv is Attr_Name : Name_Id; Str_Typ : Entity_Id) is + Ptyp : Entity_Id; + begin + Ptyp := Etype (Pref); + + -- If the prefix is a component that depends on a discriminant, then + -- create an actual subtype for it. + + if Nkind (Pref) = N_Selected_Component then + declare + Decl : constant Node_Id := + Build_Actual_Subtype_Of_Component (Ptyp, Pref); + begin + if Present (Decl) then + Insert_Action (N, Decl); + Ptyp := Defining_Identifier (Decl); + end if; + end; + end if; + Rewrite (N, Make_Attribute_Reference (Sloc (N), - Prefix => New_Occurrence_Of (Etype (Pref), Sloc (N)), + Prefix => New_Occurrence_Of (Ptyp, Sloc (N)), Attribute_Name => Attr_Name, - Expressions => New_List (Relocate_Node (Pref)))); + Expressions => New_List (Unchecked_Convert_To (Ptyp, Pref)))); Analyze_And_Resolve (N, Str_Typ); end Rewrite_Object_Image; |