aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGhjuvan Lacambre <lacambre@adacore.com>2020-03-11 08:55:56 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-10 09:35:02 -0400
commit8439cae845f2148c2df5aefa120b968ec73dd07e (patch)
tree9c3268fba31950e2dfafbe0921e534dfcf964041
parent76e0721abb9283c9127921850bee619f354701c9 (diff)
downloadgcc-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.adb11
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