* [Ada] Fix validity checks on attribute 'Old prefix
@ 2020-06-19 8:28 Pierre-Marie de Rodat
0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2020-06-19 8:28 UTC (permalink / raw)
To: gcc-patches; +Cc: Piotr Trojanek
[-- Attachment #1: Type: text/plain, Size: 468 bytes --]
Validity checks for 'Old prefixes (enabled by the -gnatVo switch) are
now executed when the 'Old prefix is evaluated, i.e. at the very
beginning of a subprogram and not when evaluating the postcondition.
Tested on x86_64-pc-linux-gnu, committed on trunk
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.
[-- Attachment #2: patch.diff --]
[-- Type: text/x-diff, Size: 2045 bytes --]
--- gcc/ada/exp_attr.adb
+++ 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));
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-06-19 8:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-19 8:28 [Ada] Fix validity checks on attribute 'Old prefix Pierre-Marie de Rodat
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).