+2018-05-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch4.adb (Expand_Composite_Equality): Compute whether the size
+ depends on a discriminant manually instead of using the predicate
+ Size_Depends_On_Discriminant in the array type case.
+
2018-05-28 Ed Schonberg <schonberg@adacore.com>
* exp_unst.adb (Check_Static_Type): For a record subtype, check
else
declare
Comp_Typ : Entity_Id;
+ Indx : Node_Id;
+ Ityp : Entity_Id;
+ Lo : Node_Id;
+ Hi : Node_Id;
begin
-- Do the comparison in the type (or its full view) and not in
-- Except for the case where the bounds of the type depend on a
-- discriminant, or else we would run into scoping issues.
- if Size_Depends_On_Discriminant (Comp_Typ) then
- Comp_Typ := Full_Type;
- end if;
+ Indx := First_Index (Comp_Typ);
+ while Present (Indx) loop
+ Ityp := Etype (Indx);
+
+ Lo := Type_Low_Bound (Ityp);
+ Hi := Type_High_Bound (Ityp);
+
+ if (Nkind (Lo) = N_Identifier
+ and then Ekind (Entity (Lo)) = E_Discriminant)
+ or else
+ (Nkind (Hi) = N_Identifier
+ and then Ekind (Entity (Hi)) = E_Discriminant)
+ then
+ Comp_Typ := Full_Type;
+ exit;
+ end if;
+
+ Next_Index (Indx);
+ end loop;
return Expand_Array_Equality (Nod, Lhs, Rhs, Bodies, Comp_Typ);
end;
+2018-05-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/renaming12.adb, gnat.dg/renaming12.ads: New testcase.
+
2018-05-28 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/rep_clause6.adb, gnat.dg/rep_clause6.ads: New testcase.
--- /dev/null
+-- { dg-do compile }
+
+package body Renaming12 is
+
+ procedure Dummy is null;
+
+end Renaming12;
--- /dev/null
+package Renaming12 is
+
+ type Index_Type is range 0 .. 40;
+
+ type Rec1 is record
+ B : Boolean;
+ end record;
+
+ type Arr is array (Index_Type range <>) of Rec1;
+
+ type Rec2 (Count : Index_Type := 0) is record
+ A : Arr (1 .. Count);
+ end record;
+
+ package Ops is
+
+ function "=" (L : Rec2; R : Rec2) return Boolean renames Renaming12."=";
+
+ end Ops;
+
+ procedure Dummy;
+
+end Renaming12;