aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGhjuvan Lacambre <lacambre@adacore.com>2020-03-12 14:12:53 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-11 05:53:33 -0400
commit6593c082b9aae7292714b20ce8f26f76e57d2221 (patch)
tree84de5c6c6c2bece08f9fcf02be85cd67fdc899ff
parentafb885445f8de9eb4f62e9e647d976202a321850 (diff)
downloadgcc-6593c082b9aae7292714b20ce8f26f76e57d2221.zip
gcc-6593c082b9aae7292714b20ce8f26f76e57d2221.tar.gz
gcc-6593c082b9aae7292714b20ce8f26f76e57d2221.tar.bz2
[Ada] Generate predicate checks for on assignments in records
2020-06-11 Ghjuvan Lacambre <lacambre@adacore.com> gcc/ada/ * exp_ch3.adb (Build_Assignment): Generate predicate check if subtype mark has predicate.
-rw-r--r--gcc/ada/exp_ch3.adb14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index 3bc1f60..f412deb 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -1998,6 +1998,20 @@ package body Exp_Ch3 is
Append (Make_Predicate_Check (Typ, Exp), Res);
end if;
+ if Nkind (Exp) = N_Allocator
+ and then Nkind (Expression (Exp)) = N_Qualified_Expression
+ then
+ declare
+ Subtype_Entity : constant Entity_Id
+ := Entity (Subtype_Mark (Expression (Exp)));
+ begin
+ if Has_Predicates (Subtype_Entity) then
+ Append (Make_Predicate_Check
+ (Subtype_Entity, Expression (Expression (Exp))), Res);
+ end if;
+ end;
+ end if;
+
return Res;
exception