diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-01 08:33:04 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-01 08:33:04 +0000 |
commit | d513339a86a3b6b024976aa181939ea0a68f98fe (patch) | |
tree | eb66d1758b9bbc36266454b1f67f25c8318cf12d | |
parent | a1c925e512e2cd97d77c8704cc12cfbc4b70a253 (diff) | |
download | gcc-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/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/ada/sem_ch13.adb | 2 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 11 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.ads | 6 | ||||
-rw-r--r-- | gcc/ada/sem_prag.adb | 24 |
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; |