diff options
author | Ghjuvan Lacambre <lacambre@adacore.com> | 2020-03-11 08:55:56 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-10 09:35:02 -0400 |
commit | 8439cae845f2148c2df5aefa120b968ec73dd07e (patch) | |
tree | 9c3268fba31950e2dfafbe0921e534dfcf964041 | |
parent | 76e0721abb9283c9127921850bee619f354701c9 (diff) | |
download | gcc-8439cae845f2148c2df5aefa120b968ec73dd07e.zip gcc-8439cae845f2148c2df5aefa120b968ec73dd07e.tar.gz gcc-8439cae845f2148c2df5aefa120b968ec73dd07e.tar.bz2 |
[Ada] Don't build equivalent record aggregate if type has predicates
2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com>
gcc/ada/
* exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty
if Etype of record component has predicates.
-rw-r--r-- | gcc/ada/exp_ch3.adb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 76b6201..3bc1f60 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 |