diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-10-26 12:07:51 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-10-26 12:07:51 +0100 |
commit | ed962eda60df47f3b03e1a41a419c48e6fce1bb3 (patch) | |
tree | 8258fa998c94458c1f520bad301cbb0847bf0a5f /gcc | |
parent | 877a5a124a918f82f808c27b8cd64b5bd07f844f (diff) | |
download | gcc-ed962eda60df47f3b03e1a41a419c48e6fce1bb3.zip gcc-ed962eda60df47f3b03e1a41a419c48e6fce1bb3.tar.gz gcc-ed962eda60df47f3b03e1a41a419c48e6fce1bb3.tar.bz2 |
[multiple changes]
2015-10-26 Hristian Kirtchev <kirtchev@adacore.com>
* sem_util.adb (Is_Suspension_Object): Ensure that the scope of "Ada"
is Standard_Standard.
2015-10-26 Hristian Kirtchev <kirtchev@adacore.com>
* sem_res.adb (Is_OK_Volatile_Context): A subprogram call is an OK
context for a reference to an effectively volatile object.
(Resolve_Actuals): Add references to SPARK RM.
(Within_Procedure_Call): Removed.
(Within_Subprogram_Call): New routine.
2015-10-26 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Check_Aggregate_Accessibility): A reference to a
formal parameter in an aggregate does not need an accesibility
check only if the formal is aliased.
From-SVN: r229329
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 19 | ||||
-rw-r--r-- | gcc/ada/sem_ch6.adb | 5 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 33 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 4 |
4 files changed, 44 insertions, 17 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9b61998..0a88e17 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,22 @@ +2015-10-26 Hristian Kirtchev <kirtchev@adacore.com> + + * sem_util.adb (Is_Suspension_Object): Ensure that the scope of "Ada" + is Standard_Standard. + +2015-10-26 Hristian Kirtchev <kirtchev@adacore.com> + + * sem_res.adb (Is_OK_Volatile_Context): A subprogram call is an OK + context for a reference to an effectively volatile object. + (Resolve_Actuals): Add references to SPARK RM. + (Within_Procedure_Call): Removed. + (Within_Subprogram_Call): New routine. + +2015-10-26 Ed Schonberg <schonberg@adacore.com> + + * sem_ch6.adb (Check_Aggregate_Accessibility): A reference to a + formal parameter in an aggregate does not need an accesibility + check only if the formal is aliased. + 2015-10-26 Claire Dross <dross@adacore.com> * sem_aux.ads (Number_Components): Can return 0 when called on diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 56a13de..86363ca 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -661,10 +661,13 @@ package body Sem_Ch6 is Obj := Prefix (Obj); end loop; + -- No check needed for an aliased formal. + -- A run-time check may still be needed ??? + if Is_Entity_Name (Obj) and then Is_Formal (Entity (Obj)) + and then Is_Aliased (Entity (Obj)) then - -- A run-time check may be needed ??? null; elsif Object_Access_Level (Obj) > diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index b2d3ca0..7e73617 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -4464,17 +4464,18 @@ package body Sem_Res is and then Comes_From_Source (A) and then Is_Effectively_Volatile_Object (A) then - -- An effectively volatile object may act as an actual - -- parameter when the corresponding formal is of a non-scalar - -- volatile type. + -- An effectively volatile object may act as an actual when the + -- corresponding formal is of a non-scalar volatile type + -- (SPARK RM 7.1.3(12)). if Is_Volatile (Etype (F)) and then not Is_Scalar_Type (Etype (F)) then null; - -- An effectively volatile object may act as an actual - -- parameter in a call to an instance of Unchecked_Conversion. + -- An effectively volatile object may act as an actual in a + -- call to an instance of Unchecked_Conversion. + -- (SPARK RM 7.1.3(12)). elsif Is_Unchecked_Conversion_Instance (Nam) then null; @@ -6843,7 +6844,7 @@ package body Sem_Res is function Within_Check (Nod : Node_Id) return Boolean; -- Determine whether an arbitrary node appears in a check node - function Within_Procedure_Call (Nod : Node_Id) return Boolean; + function Within_Subprogram_Call (Nod : Node_Id) return Boolean; -- Determine whether an arbitrary node appears in a procedure call function Within_Volatile_Function (Id : Entity_Id) return Boolean; @@ -6907,19 +6908,21 @@ package body Sem_Res is return False; end Within_Check; - --------------------------- - -- Within_Procedure_Call -- - --------------------------- + ---------------------------- + -- Within_Subprogram_Call -- + ---------------------------- - function Within_Procedure_Call (Nod : Node_Id) return Boolean is + function Within_Subprogram_Call (Nod : Node_Id) return Boolean is Par : Node_Id; begin - -- Climb the parent chain looking for a procedure call + -- Climb the parent chain looking for a function or procedure call Par := Nod; while Present (Par) loop - if Nkind (Par) = N_Procedure_Call_Statement then + if Nkind_In (Par, N_Function_Call, + N_Procedure_Call_Statement) + then return True; -- Prevent the search from going too far @@ -6932,7 +6935,7 @@ package body Sem_Res is end loop; return False; - end Within_Procedure_Call; + end Within_Subprogram_Call; ------------------------------ -- Within_Volatile_Function -- @@ -7049,10 +7052,10 @@ package body Sem_Res is return True; -- Assume that references to effectively volatile objects that appear - -- as actual parameters in a procedure call are always legal. A full + -- as actual parameters in a subprogram call are always legal. A full -- legality check is done when the actuals are resolved. - elsif Within_Procedure_Call (Context) then + elsif Within_Subprogram_Call (Context) then return True; -- Otherwise the context is not suitable for an effectively volatile diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 4a86c71..313591a 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -11331,7 +11331,9 @@ package body Sem_Util is and then Present (Scope (Id)) and then Chars (Scope (Id)) = Name_Synchronous_Task_Control and then Present (Scope (Scope (Id))) - and then Chars (Scope (Scope (Id))) = Name_Ada; + and then Chars (Scope (Scope (Id))) = Name_Ada + and then Present (Scope (Scope (Scope (Id)))) + and then Scope (Scope (Scope (Id))) = Standard_Standard; end Is_Suspension_Object; -- Local variables |