aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2020-04-27 14:22:53 +0200
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-17 13:14:06 -0300
commit420bf08dd17d113d9e83f3113fbc7243bdec03fc (patch)
treefa3953bec9be0d80bc5d9ee614344f5507e2774a /gcc
parent7012abc11bf3e6bfb8a605f066cd3771459d2446 (diff)
downloadgcc-420bf08dd17d113d9e83f3113fbc7243bdec03fc.zip
gcc-420bf08dd17d113d9e83f3113fbc7243bdec03fc.tar.gz
gcc-420bf08dd17d113d9e83f3113fbc7243bdec03fc.tar.bz2
[Ada] Fix validity checks on attribute 'Old prefix
2020-06-19 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Call Ensure_Valid on the expression of an object declaration that captures the value of 'Old prefix.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_attr.adb16
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 84a36f8..30bb7cc 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -4587,6 +4587,7 @@ package body Exp_Attr is
Typ : constant Entity_Id := Etype (N);
CW_Temp : Entity_Id;
CW_Typ : Entity_Id;
+ Decl : Node_Id;
Ins_Nod : Node_Id;
Subp : Node_Id;
Temp : Entity_Id;
@@ -4685,13 +4686,15 @@ package body Exp_Attr is
CW_Temp := Make_Temporary (Loc, 'T');
CW_Typ := Class_Wide_Type (Typ);
- Insert_Before_And_Analyze (Ins_Nod,
+ Decl :=
Make_Object_Declaration (Loc,
Defining_Identifier => CW_Temp,
Constant_Present => True,
Object_Definition => New_Occurrence_Of (CW_Typ, Loc),
Expression =>
- Convert_To (CW_Typ, Relocate_Node (Pref))));
+ Convert_To (CW_Typ, Relocate_Node (Pref)));
+
+ Insert_Before_And_Analyze (Ins_Nod, Decl);
-- Generate:
-- Temp : Typ renames Typ (CW_Temp);
@@ -4709,12 +4712,15 @@ package body Exp_Attr is
-- Generate:
-- Temp : constant Typ := Pref;
- Insert_Before_And_Analyze (Ins_Nod,
+ Decl :=
Make_Object_Declaration (Loc,
Defining_Identifier => Temp,
Constant_Present => True,
Object_Definition => New_Occurrence_Of (Typ, Loc),
- Expression => Relocate_Node (Pref)));
+ Expression => Relocate_Node (Pref));
+
+ Insert_Before_And_Analyze (Ins_Nod, Decl);
+
end if;
if Present (Subp) then
@@ -4726,7 +4732,7 @@ package body Exp_Attr is
-- to reflect the new placement of the prefix.
if Validity_Checks_On and then Validity_Check_Operands then
- Ensure_Valid (Pref);
+ Ensure_Valid (Expression (Decl));
end if;
Rewrite (N, New_Occurrence_Of (Temp, Loc));