diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-25 15:59:05 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-25 15:59:05 +0000 |
commit | 632a89954bc74fcf3cbc4cd34d04da14093ea3a8 (patch) | |
tree | 55546168634e1653e8e637a0b8c0f34c3ccdada9 /gcc/ada/exp_ch7.adb | |
parent | fd11b6022fadd0ed9993f7bd3a8c8858f2be1ddd (diff) | |
download | gcc-632a89954bc74fcf3cbc4cd34d04da14093ea3a8.tar.gz |
2004-02-25 Robert Dewar <dewar@gnat.com>
* 51osinte.ads, 52osinte.ads, 53osinte.ads, 54osinte.ads,
55osinte.ads, 56osinte.ads, 5aosinte.ads, 5bosinte.ads,
5cosinte.ads, 5fosinte.ads, 5gosinte.ads, 5hosinte.ads,
5iosinte.ads, 5losinte.ads, 5nosinte.ads, 5oosinte.ads,
5posinte.ads, 5sosinte.ads, 5tosinte.ads, 5vosinte.ads,
5wosinte.ads, 5zosinte.ads: Move instances of Unchecked_Conversion to
the defining instance of the type to avoid aliasing problems.
Fix copyright header. Fix bad comments in package header.
* exp_util.adb, prj-part.adb, prj-part.adb: Minor reformatting
2004-02-25 Ed Schonberg <schonberg@gnat.com>
* exp_ch2.adb (Param_Entity): Handle properly formals that have been
rewritten as references when aliased through an address clause.
* sem_ch4.adb (Try_Indirect_Call): Normalize actuals before checking
whether call can be interpreted as an indirect call to the result of a
parameterless function call returning an access subprogram.
2004-02-25 Arnaud Charlet <charlet@act-europe.fr>
Code clean up:
* exp_ch7.adb (Make_Clean): Remove generation of calls to
Unlock[_Entries], since this is now done by Service_Entries directly.
* exp_ch9.adb (Build_Protected_Subprogram_Body): ditto.
* s-tpobop.ads, s-tpobop.adb (PO_Service_Entries): New nested procedure
Requeue_Call for better code readability. Change spec and update calls:
PO_Service_Entries now unlock the PO on exit.
(Protected_Entry_Call, Timed_Protected_Entry_Call): Update calls to
PO_Service_Entries.
* s-tposen.ads, s-tposen.adb (Service_Entry): Now unlock the PO on exit.
* s-taenca.adb, s-tasren.adb: Update calls to PO_Service_Entries.
2004-02-25 Sergey Rybin <rybin@act-europe.fr>
* exp_ch9.adb (Build_Simple_Entry_Call): Prevent expanding the
protected subprogram call and analyzing the result of such expanding
in case when the called protected subprogram is eliminated.
* sem_elim.adb (Check_Eliminated): Skip blocks when comparing scope
names.
2004-02-25 Jerome Guitton <guitton@act-europe.fr>
* Makefile.in: Clean ups.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78436 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/exp_ch7.adb')
-rw-r--r-- | gcc/ada/exp_ch7.adb | 70 |
1 files changed, 36 insertions, 34 deletions
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 2a683a27d55..e78d9954082 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -2193,7 +2193,6 @@ package body Exp_Ch7 is Spec : Node_Id; Name : Node_Id; Param : Node_Id; - Unlock : Node_Id; Param_Type : Entity_Id; Pid : Entity_Id := Empty; Cancel_Param : Entity_Id; @@ -2274,50 +2273,53 @@ package body Exp_Ch7 is Selector_Name => Make_Identifier (Loc, Name_uObject)), Attribute_Name => Name_Unchecked_Access)))); - end if; - -- Unlock (_object._object'Access); + else + -- Unlock (_object._object'Access); - -- _object is the record used to implement the protected object. - -- It is a parameter to the protected subprogram. + -- object is the record used to implement the protected object. + -- It is a parameter to the protected subprogram. - -- If the protected object is controlled (i.e it has entries or - -- needs finalization for interrupt handling), call Unlock_Entries, - -- except if the protected object follows the ravenscar profile, in - -- which case call Unlock_Entry, otherwise call the simplified - -- version, Unlock. + -- If the protected object is controlled (i.e it has entries or + -- needs finalization for interrupt handling), call + -- Unlock_Entries, except if the protected object follows the + -- ravenscar profile, in which case call Unlock_Entry, otherwise + -- call the simplified version, Unlock. - if Has_Entries (Pid) - or else Has_Interrupt_Handler (Pid) - or else (Has_Attach_Handler (Pid) and then not Restricted_Profile) - then - if Abort_Allowed - or else Restriction_Active (No_Entry_Queue) = False - or else Number_Entries (Pid) > 1 + if Has_Entries (Pid) + or else Has_Interrupt_Handler (Pid) + or else (Has_Attach_Handler (Pid) + and then not Restricted_Profile) then - Unlock := New_Reference_To (RTE (RE_Unlock_Entries), Loc); + if Abort_Allowed + or else Restriction_Active (No_Entry_Queue) = False + or else Number_Entries (Pid) > 1 + then + Name := New_Reference_To (RTE (RE_Unlock_Entries), Loc); + else + Name := New_Reference_To (RTE (RE_Unlock_Entry), Loc); + end if; + else - Unlock := New_Reference_To (RTE (RE_Unlock_Entry), Loc); + Name := New_Reference_To (RTE (RE_Unlock), Loc); end if; - else - Unlock := New_Reference_To (RTE (RE_Unlock), Loc); + Append_To (Stmt, + Make_Procedure_Call_Statement (Loc, + Name => Name, + Parameter_Associations => New_List ( + Make_Attribute_Reference (Loc, + Prefix => + Make_Selected_Component (Loc, + Prefix => + New_Reference_To (Defining_Identifier (Param), Loc), + Selector_Name => + Make_Identifier (Loc, Name_uObject)), + Attribute_Name => Name_Unchecked_Access)))); end if; - Append_To (Stmt, - Make_Procedure_Call_Statement (Loc, - Name => Unlock, - Parameter_Associations => New_List ( - Make_Attribute_Reference (Loc, - Prefix => - Make_Selected_Component (Loc, - Prefix => - New_Reference_To (Defining_Identifier (Param), Loc), - Selector_Name => - Make_Identifier (Loc, Name_uObject)), - Attribute_Name => Name_Unchecked_Access)))); - if Abort_Allowed then + -- Abort_Undefer; Append_To (Stmt, |