summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2012-10-01 08:33:04 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2012-10-01 08:33:04 +0000
commitd513339a86a3b6b024976aa181939ea0a68f98fe (patch)
treeeb66d1758b9bbc36266454b1f67f25c8318cf12d
parenta1c925e512e2cd97d77c8704cc12cfbc4b70a253 (diff)
downloadgcc-d513339a86a3b6b024976aa181939ea0a68f98fe.tar.gz
2012-10-01 Yannick Moy <moy@adacore.com>
* sem_ch13.adb (Add_Invariants): Analyze the invariant expression as an assertion expression. * sem_ch3.adb / sem_ch3.ads (Preanalyze_Assert_Expression): New procedure that wraps a call to Preanalyze_Spec_Expression for assertion expressions, so that In_Assertion_Expr can be properly adjusted. * sem_prag.adb (Analyze_PPC_In_Decl_Part Check_Precondition_Postcondition Preanalyze_CTC_Args): Call the new Preanalyze_Assert_Expression. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191898 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/ChangeLog12
-rw-r--r--gcc/ada/sem_ch13.adb2
-rw-r--r--gcc/ada/sem_ch3.adb11
-rw-r--r--gcc/ada/sem_ch3.ads6
-rw-r--r--gcc/ada/sem_prag.adb24
5 files changed, 40 insertions, 15 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 71b63396636..d052709015d 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,15 @@
+2012-10-01 Yannick Moy <moy@adacore.com>
+
+ * sem_ch13.adb (Add_Invariants): Analyze the invariant expression
+ as an assertion expression.
+ * sem_ch3.adb / sem_ch3.ads (Preanalyze_Assert_Expression):
+ New procedure that wraps a call to Preanalyze_Spec_Expression
+ for assertion expressions, so that In_Assertion_Expr can be
+ properly adjusted.
+ * sem_prag.adb (Analyze_PPC_In_Decl_Part
+ Check_Precondition_Postcondition Preanalyze_CTC_Args): Call the
+ new Preanalyze_Assert_Expression.
+
2012-10-01 Robert Dewar <dewar@adacore.com>
* checks.ads: Minor reformatting.
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 41c4cfa0518..cb7ac9eb4d4 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -5058,7 +5058,7 @@ package body Sem_Ch13 is
-- at the end of the private part and has the wrong visibility.
Set_Parent (Exp, N);
- Preanalyze_Spec_Expression (Exp, Standard_Boolean);
+ Preanalyze_Assert_Expression (Exp, Standard_Boolean);
-- Build first two arguments for Check pragma
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index b61821e6549..6b9e88bfd40 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -19306,6 +19306,17 @@ package body Sem_Ch3 is
end if;
end Check_Anonymous_Access_Components;
+ ----------------------------------
+ -- Preanalyze_Assert_Expression --
+ ----------------------------------
+
+ procedure Preanalyze_Assert_Expression (N : Node_Id; T : Entity_Id) is
+ begin
+ In_Assertion_Expr := In_Assertion_Expr + 1;
+ Preanalyze_Spec_Expression (N, T);
+ In_Assertion_Expr := In_Assertion_Expr - 1;
+ end Preanalyze_Assert_Expression;
+
--------------------------------
-- Preanalyze_Spec_Expression --
--------------------------------
diff --git a/gcc/ada/sem_ch3.ads b/gcc/ada/sem_ch3.ads
index a57b65d7d6c..482450176a9 100644
--- a/gcc/ada/sem_ch3.ads
+++ b/gcc/ada/sem_ch3.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -246,6 +246,10 @@ package Sem_Ch3 is
-- This mechanism is also used for aspect specifications that have an
-- expression parameter that needs similar preanalysis.
+ procedure Preanalyze_Assert_Expression (N : Node_Id; T : Entity_Id);
+ -- Wrapper on Preanalyze_Spec_Expression for assertion expressions, so that
+ -- In_Assertion_Expr can be properly adjusted.
+
procedure Process_Full_View (N : Node_Id; Full_T, Priv_T : Entity_Id);
-- Process some semantic actions when the full view of a private type is
-- encountered and analyzed. The first action is to create the full views
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index a9c1af7b2b5..38f916f3942 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -286,9 +286,7 @@ package body Sem_Prag is
-- Preanalyze the boolean expression, we treat this as a spec expression
-- (i.e. similar to a default expression).
- In_Assertion_Expr := In_Assertion_Expr + 1;
- Preanalyze_Spec_Expression (Get_Pragma_Arg (Arg1), Standard_Boolean);
- In_Assertion_Expr := In_Assertion_Expr - 1;
+ Preanalyze_Assert_Expression (Get_Pragma_Arg (Arg1), Standard_Boolean);
-- In ASIS mode, for a pragma generated from a source aspect, also
-- analyze the original aspect expression.
@@ -296,7 +294,7 @@ package body Sem_Prag is
if ASIS_Mode
and then Present (Corresponding_Aspect (N))
then
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Expression (Corresponding_Aspect (N)), Standard_Boolean);
end if;
@@ -2178,7 +2176,7 @@ package body Sem_Prag is
then
-- Analyze pragma expression for correctness and for ASIS use
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Get_Pragma_Arg (Arg1), Standard_Boolean);
-- In ASIS mode, for a pragma generated from a source aspect,
@@ -2187,7 +2185,7 @@ package body Sem_Prag is
if ASIS_Mode
and then Present (Corresponding_Aspect (N))
then
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Expression (Corresponding_Aspect (N)), Standard_Boolean);
end if;
end if;
@@ -6773,7 +6771,8 @@ package body Sem_Prag is
-- pragma Check (Assertion, condition [, msg]);
- -- So rewrite pragma in this manner, and analyze the result
+ -- So rewrite pragma in this manner, transfer the message
+ -- argument if present, and analyze the result
Expr := Get_Pragma_Arg (Arg1);
Newa := New_List (
@@ -6785,8 +6784,7 @@ package body Sem_Prag is
if Arg_Count > 1 then
Check_Optional_Identifier (Arg2, Name_Message);
- Analyze_And_Resolve (Get_Pragma_Arg (Arg2), Standard_String);
- Append_To (Newa, Relocate_Node (Arg2));
+ Append_To (Newa, New_Copy_Tree (Arg2));
end if;
Rewrite (N,
@@ -15532,27 +15530,27 @@ package body Sem_Prag is
-- expressions (i.e. similar to a default expression).
if Present (Arg_Req) then
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Get_Pragma_Arg (Arg_Req), Standard_Boolean);
-- In ASIS mode, for a pragma generated from a source aspect, also
-- analyze the original aspect expression.
if ASIS_Mode and then Present (Corresponding_Aspect (N)) then
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Original_Node (Get_Pragma_Arg (Arg_Req)), Standard_Boolean);
end if;
end if;
if Present (Arg_Ens) then
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Get_Pragma_Arg (Arg_Ens), Standard_Boolean);
-- In ASIS mode, for a pragma generated from a source aspect, also
-- analyze the original aspect expression.
if ASIS_Mode and then Present (Corresponding_Aspect (N)) then
- Preanalyze_Spec_Expression
+ Preanalyze_Assert_Expression
(Original_Node (Get_Pragma_Arg (Arg_Ens)), Standard_Boolean);
end if;
end if;