summaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch7.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-25 15:59:05 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-25 15:59:05 +0000
commit632a89954bc74fcf3cbc4cd34d04da14093ea3a8 (patch)
tree55546168634e1653e8e637a0b8c0f34c3ccdada9 /gcc/ada/exp_ch7.adb
parentfd11b6022fadd0ed9993f7bd3a8c8858f2be1ddd (diff)
downloadgcc-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.adb70
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,