mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 23:51:18 +08:00
[Ada] Fix setting of Has_Predicate flag for aggregate subtypes
This patch enures that the subtype of an aggregate has the Has_Predicate flag properly set if the array component has a predicate, including the case the predicate function for the component has not been constructed yet. 2018-12-11 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_aggr.adb (Array_Aggr_Subtype. Resolve_Aggr_Expr): Indicate that aggregate subtype has a predicate if the component type has a predicate; do not rely on exisatence of predicate function for component, in case component is a type no yet frozen, for which predicate function has not been created yet. From-SVN: r267007
This commit is contained in:
parent
78326189ea
commit
619bfd9fef
gcc/ada
@ -1,3 +1,11 @@
|
||||
2018-12-11 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* sem_aggr.adb (Array_Aggr_Subtype. Resolve_Aggr_Expr): Indicate
|
||||
that aggregate subtype has a predicate if the component type has
|
||||
a predicate; do not rely on exisatence of predicate function for
|
||||
component, in case component is a type no yet frozen, for which
|
||||
predicate function has not been created yet.
|
||||
|
||||
2018-12-11 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* exp_aggr.adb (Packed_Array_Aggregate_Handled): Bail out for
|
||||
|
@ -611,6 +611,16 @@ package body Sem_Aggr is
|
||||
Set_Is_Constrained (Itype, True);
|
||||
Set_Is_Internal (Itype, True);
|
||||
|
||||
if Has_Predicates (Typ) then
|
||||
Set_Has_Predicates (Itype);
|
||||
|
||||
if Present (Predicate_Function (Typ)) then
|
||||
Set_Predicate_Function (Itype, Predicate_Function (Typ));
|
||||
else
|
||||
Set_Predicated_Parent (Itype, Predicated_Parent (Typ));
|
||||
end if;
|
||||
end if;
|
||||
|
||||
-- A simple optimization: purely positional aggregates of static
|
||||
-- components should be passed to gigi unexpanded whenever possible, and
|
||||
-- regardless of the staticness of the bounds themselves. Subsequent
|
||||
@ -1627,7 +1637,7 @@ package body Sem_Aggr is
|
||||
-- component assignments. If the expression covers several components
|
||||
-- the analysis and the predicate check take place later.
|
||||
|
||||
if Present (Predicate_Function (Component_Typ))
|
||||
if Has_Predicates (Component_Typ)
|
||||
and then Analyzed (Expr)
|
||||
then
|
||||
Apply_Predicate_Check (Expr, Component_Typ);
|
||||
@ -4194,7 +4204,7 @@ package body Sem_Aggr is
|
||||
-- because the aggegate might not be expanded into individual
|
||||
-- component assignments.
|
||||
|
||||
if Present (Predicate_Function (Expr_Type))
|
||||
if Has_Predicates (Expr_Type)
|
||||
and then Analyzed (Expr)
|
||||
then
|
||||
Apply_Predicate_Check (Expr, Expr_Type);
|
||||
|
Loading…
x
Reference in New Issue
Block a user