From: Ghjuvan Lacambre Date: Wed, 11 Mar 2020 07:55:56 +0000 (+0100) Subject: [Ada] Don't build equivalent record aggregate if type has predicates X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8439cae845f2148c2df5aefa120b968ec73dd07e;p=gcc.git [Ada] Don't build equivalent record aggregate if type has predicates 2020-06-10 Ghjuvan Lacambre gcc/ada/ * exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty if Etype of record component has predicates. --- diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 76b62019778..3bc1f607f9a 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -1211,6 +1211,17 @@ package body Exp_Ch3 is then Initialization_Warning (T); return Empty; + + -- We need to return empty if the type has predicates because + -- this would otherwise duplicate calls to the predicate + -- function. If the type hasn't been frozen before being + -- referenced in the current record, the extraneous call to + -- the predicate function would be inserted somewhere before + -- the predicate function is elaborated, which would result in + -- an invalid tree. + + elsif Has_Predicates (Etype (Comp)) then + return Empty; end if; elsif Is_Scalar_Type (Etype (Comp)) then