aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorYannick Moy <moy@adacore.com>2019-07-10 08:59:33 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-07-10 08:59:33 +0000
commite9427de1bf3eb46ba1651a8fd2ce1feb7e8d63f1 (patch)
tree164ce3cfd5a3ed037d11aee35da58ca446c19ae2 /gcc
parenta620ef15027baace38d591709474f1a9519ba657 (diff)
downloadgcc-e9427de1bf3eb46ba1651a8fd2ce1feb7e8d63f1.zip
gcc-e9427de1bf3eb46ba1651a8fd2ce1feb7e8d63f1.tar.gz
gcc-e9427de1bf3eb46ba1651a8fd2ce1feb7e8d63f1.tar.bz2
[Ada] Use renamings in GNATprove mode for side-effects extraction
In the GNATprove mode for formal verification, prefer renamings over declaration of a constant to extract side-effects from expressions, whenever the constant could be of an owning type, as declaring a constant of an owning type has an effect on ownership which is undesirable. There is no impact on compilation. 2019-07-10 Yannick Moy <moy@adacore.com> gcc/ada/ * exp_util.adb (Remove_Side_Effects): Prefer renamings for objects of possible owning type in GNATprove mode. From-SVN: r273324
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/exp_util.adb12
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index cb2acf3..db33d64 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-10 Yannick Moy <moy@adacore.com>
+
+ * exp_util.adb (Remove_Side_Effects): Prefer renamings for
+ objects of possible owning type in GNATprove mode.
+
2019-07-09 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Analyze_Object_Declaration): If the object type
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index f131080..2d88ee9 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -11333,7 +11333,17 @@ package body Exp_Util is
-- Generate:
-- Rnn : Exp_Type renames Expr;
- if Renaming_Req then
+ -- In GNATprove mode, we prefer to use renamings for intermediate
+ -- variables to definition of constants, due to the implicit move
+ -- operation that such a constant definition causes as part of the
+ -- support in GNATprove for ownership pointers. Hence we generate
+ -- a renaming for a reference to an object of a non-scalar type.
+
+ if Renaming_Req
+ or else (GNATprove_Mode
+ and then Is_Object_Reference (Exp)
+ and then not Is_Scalar_Type (Exp_Type))
+ then
E :=
Make_Object_Renaming_Declaration (Loc,
Defining_Identifier => Def_Id,