aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYannick Moy <moy@adacore.com>2019-09-17 08:02:15 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-09-17 08:02:15 +0000
commit8df56dfc6991bda3c1cfa9d102c49d963763d5b4 (patch)
treec64b3a724fb79f4b421ab9ec5da0b6b89dd6387d
parent86ae194fdb343487d37899f4f51fdf3e626822e0 (diff)
downloadgcc-8df56dfc6991bda3c1cfa9d102c49d963763d5b4.zip
gcc-8df56dfc6991bda3c1cfa9d102c49d963763d5b4.tar.gz
gcc-8df56dfc6991bda3c1cfa9d102c49d963763d5b4.tar.bz2
[Ada] GNATprove: avoid crash on illegal borrow during package elaboration
In GNATprove, a borrow during package elaboration is illegal, but a crash could be issued when analyzing the corresponding declaration. Now avoid analyzing the declaration in that case. There is no test as this does not impact compilation. 2019-09-17 Yannick Moy <moy@adacore.com> gcc/ada/ * sem_spark.adb (Check_Declaration): Do not check the assignment from an illegal declaration. From-SVN: r275788
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/sem_spark.adb12
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index f0d1f37..af3a2e7 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-17 Yannick Moy <moy@adacore.com>
+
+ * sem_spark.adb (Check_Declaration): Do not check the assignment
+ from an illegal declaration.
+
2019-09-17 Bob Duff <duff@adacore.com>
* doc/gnat_ugn/gnat_and_program_execution.rst: Clarify
diff --git a/gcc/ada/sem_spark.adb b/gcc/ada/sem_spark.adb
index af53f69..e4a8b3e 100644
--- a/gcc/ada/sem_spark.adb
+++ b/gcc/ada/sem_spark.adb
@@ -1419,12 +1419,12 @@ package body Sem_SPARK is
Target : constant Entity_Id := Defining_Identifier (Decl);
Target_Typ : constant Node_Id := Etype (Target);
Expr : Node_Id;
- Dummy : Boolean := True;
+ Legal : Boolean := True;
begin
-- Start with legality rules not related to permissions
- Check_Declaration_Legality (Decl, Force => True, Legal => Dummy);
+ Check_Declaration_Legality (Decl, Force => True, Legal => Legal);
-- Now check permission-related legality rules
@@ -1432,7 +1432,7 @@ package body Sem_SPARK is
when N_Full_Type_Declaration =>
null;
- -- ??? What about component declarations with defaults.
+ -- ??? What about component declarations with defaults.
when N_Subtype_Declaration =>
Check_Expression (Subtype_Indication (Decl), Read);
@@ -1440,11 +1440,15 @@ package body Sem_SPARK is
when N_Object_Declaration =>
Expr := Expression (Decl);
- if Present (Expr) then
+ if Legal and then Present (Expr) then
Check_Assignment (Target => Target,
Expr => Expr);
end if;
+ -- Always add variable to the current permission environment,
+ -- even in the illegal case, as the rest of the analysis expects
+ -- to find it.
+
if Is_Deep (Target_Typ) then
declare
Tree : constant Perm_Tree_Access :=