summaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch6.ads
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-06 10:25:50 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-06 10:25:50 +0000
commit4907451e24e11a9476d79aced783dd725c028da7 (patch)
tree1432e807f3070b618d4b46fb313c6cae5e25b550 /gcc/ada/exp_ch6.ads
parent0524b5dd74aacbd13c58ab30694dbaacf1568603 (diff)
downloadgcc-4907451e24e11a9476d79aced783dd725c028da7.tar.gz
2007-04-20 Gary Dismukes <dismukes@adacore.com>
Ed Schonberg <schonberg@adacore.com> * exp_ch6.ads, exp_ch6.adb (Expand_Call): When adding an extra accessibility actual, check for the case of an aliased object that has been rewritten as an Access attribute, and assign Prev to Prev_Orig so we fall into processing for the attribute rather than the name of the object. (Expand_Inline_Call): If an actual is a literal, and the corresponding formal has its address taken in the body, create a temporary to capture value. If the return type is a limited interface, do not treat the return value as Controlled. (Is_In_Place_Function): If the return type is a limited interface, treat as returning in place. The actual returned object may not always be limited, but the caller has to assume that it is returned in place. (Add_Final_List_Actual_To_Build_In_Place_Call): If the call is the context of an allocator, use the correct finalization chain (that is, the chain belonging to the access type, rather than the chain belonging to the current scope). (Add_Alloc_Form_Actual_To_Build_In_Place_Call): Test for a tagged result type rather than a controlling result as a precondition for adding an allocation form actual to a build-in-place call. (Add_Final_List_Actual_To_Build_In_Place_Call): Ditto. (Freeze_Subprogram): Code cleanup. Remove all the code that register the primitive in the dispatch tables. This work is now done by Make_DT when the type is frozen. (Register_Predefined_DT_Entry): Removed. (Add_Return): If end label is not present, use sloc of last statement for generated return statement in procedure, for better gdb behavior on expanded code. (Add_Access_Actual_To_Build_In_Place_Call): Set parent fields of the object address nodes to ensure proper processing by routines like Insert_After*. (Expand_Call): Fix generation of validity check for parameter (Add_Alloc_Form_Actual_To_Build_In_Place_Call): Return without passing the allocation form parameter if the result subtype is constrained, except when the function has a controlling result. (Add_Final_List_Actual_To_Build_In_Place_Call): Test Controlled_Type rather than Is_Controlled and Has_Controlled_Component, since we want to include class-wide result types in this treatment. Also test for a controlling result, since that also requires passing a finalization list. (Make_Build_In_Place_Call_In_Allocator): Call Add_Alloc_Form_Actual_* even when the result subtype is constrained, to handle calls involving controlling results. (Make_Build_In_Place_Call_In_Anonymous_Context): Add_Alloc_Form_Actual_* is now called even when the result subtype is constrained, to handle calls involving controlling results. (Make_Build_In_Place_Call_In_Assignment): Remove test for Is_Constrained on call to Add_Alloc_Form_Actual_To_Build_In_Place_Call (that procedure now performs the test). (Make_Build_In_Place_Call_In_Object_Declaration): Add_Alloc_Form_Actual_* is now called even when the result subtype is constrained, to handle calls involving controlling results. (Add_Return): Accomodate rewritten pattern from local raise to goto transformation, so that we still recognize an transfer statement and do the right thing here in that case. (Expand_N_Subprogram_Body): Add dummy Push/Pop_xxx_Label nodes at start and end of subprogram code. (Register_Interface_DT_Entry, Register_Predefined_DT_Entry): Add missing support for primitives that are functions (without formals) with a controlling result. (Inherited_From_Formal): If the actual subtype has not generic parent type, it is not an actual for a formal derived type, and there is no operation to inherit from the formal. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125399 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/exp_ch6.ads')
-rw-r--r--gcc/ada/exp_ch6.ads16
1 files changed, 5 insertions, 11 deletions
diff --git a/gcc/ada/exp_ch6.ads b/gcc/ada/exp_ch6.ads
index 436654c4c1b..415fad22bb0 100644
--- a/gcc/ada/exp_ch6.ads
+++ b/gcc/ada/exp_ch6.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2007, 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- --
@@ -61,10 +61,10 @@ package Exp_Ch6 is
-- enumeration literals matches the order in which the formals are
-- declared. See Sem_Ch6.Create_Extra_Formals.
(BIP_Alloc_Form,
- -- Present if result subtype is unconstrained. Indicates whether the
- -- return object is allocated by the caller or callee, and if the
- -- callee, whether to use the secondary stack or the heap. See
- -- Create_Extra_Formals.
+ -- Present if result subtype is unconstrained, or if the result type
+ -- is tagged. Indicates whether the return object is allocated by the
+ -- caller or callee, and if the callee, whether to use the secondary
+ -- stack or the heap. See Create_Extra_Formals.
BIP_Final_List,
-- Present if result type has controlled parts. Pointer to caller's
-- finalization list.
@@ -162,10 +162,4 @@ package Exp_Ch6 is
-- for which Is_Build_In_Place_Call is True, or an N_Qualified_Expression
-- node applied to such a function call.
- procedure Register_Interface_DT_Entry
- (Related_Nod : Node_Id;
- Prim : Entity_Id);
- -- Ada 2005 (AI-251): Register a primitive in a secondary dispatch table.
- -- Related_Nod is the node after which the expanded code will be inserted.
-
end Exp_Ch6;