aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-09-01 15:14:44 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-09-01 15:14:44 +0200
commitdb15225a8e354c5223e074054bbf8757b886d032 (patch)
tree2c2493e13288720b514a41b4a5a3565d77279b11 /gcc
parent9d641fc0bb5b3ee8b898948aa890647060a415d3 (diff)
downloadgcc-db15225a8e354c5223e074054bbf8757b886d032.zip
gcc-db15225a8e354c5223e074054bbf8757b886d032.tar.gz
gcc-db15225a8e354c5223e074054bbf8757b886d032.tar.bz2
[multiple changes]
2011-09-01 Hristian Kirtchev <kirtchev@adacore.com> * exp_ch4.adb: Minor code and comment reformatting. 2011-09-01 Thomas Quinot <quinot@adacore.com> * exp_ch6.adb (Expand_Inlined_Call): Remove redundant tests for Is_Limited_Type and Is_Tagged_Type in condition checking for by-reference type. * inline.adb (Add_Inlined_Body): Only exclude init_procs. Other subprograms may have a completion because of a previous Inline_Always clause, but the enclosing package must be marked inlined for the subprogram body to become visible to the backend. From-SVN: r178410
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/exp_ch4.adb24
-rw-r--r--gcc/ada/exp_ch6.adb17
-rw-r--r--gcc/ada/inline.adb8
4 files changed, 40 insertions, 23 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6705964..957a04a 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,17 @@
+2011-09-01 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * exp_ch4.adb: Minor code and comment reformatting.
+
+2011-09-01 Thomas Quinot <quinot@adacore.com>
+
+ * exp_ch6.adb (Expand_Inlined_Call): Remove redundant tests
+ for Is_Limited_Type and Is_Tagged_Type in condition checking
+ for by-reference type.
+ * inline.adb (Add_Inlined_Body): Only exclude init_procs. Other
+ subprograms may have a completion because of a previous
+ Inline_Always clause, but the enclosing package must be marked
+ inlined for the subprogram body to become visible to the backend.
+
2011-09-01 Thomas Quinot <quinot@adacore.com>
* sem_aux.adb, exp_ch4.adb: Minor reformatting
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index f040f4f..65735b8 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -4417,11 +4417,11 @@ package body Exp_Ch4 is
procedure Process_Transient_Object (Decl : Node_Id) is
function Find_Insertion_Node return Node_Id;
- -- Complex if statements may be converted into nested EWAs. In this
- -- case, any generated code must be inserted before the if statement
- -- to ensure proper visibility of the "hook" objects. This routine
- -- returns the top most short circuit operator or the parent of the
- -- EWA if no nesting was detected.
+ -- Complex conditions in if statements may be converted into nested
+ -- EWAs. In this case, any generated code must be inserted before the
+ -- if statement to ensure proper visibility of the hook objects. This
+ -- routine returns the top most short circuit operator or the parent
+ -- of the EWA if no nesting was detected.
-------------------------
-- Find_Insertion_Node --
@@ -4431,7 +4431,7 @@ package body Exp_Ch4 is
Par : Node_Id;
begin
- -- Climb up the branches of a complex if statement
+ -- Climb up the branches of a complex condition
Par := N;
while Nkind_In (Parent (Par), N_And_Then, N_Op_Not, N_Or_Else) loop
@@ -4443,7 +4443,7 @@ package body Exp_Ch4 is
-- Local variables
- Ins_Nod : constant Node_Id := Find_Insertion_Node;
+ Ins_Node : constant Node_Id := Find_Insertion_Node;
Loc : constant Source_Ptr := Sloc (Decl);
Obj_Id : constant Entity_Id := Defining_Identifier (Decl);
Obj_Typ : constant Entity_Id := Etype (Obj_Id);
@@ -4480,7 +4480,7 @@ package body Exp_Ch4 is
Ekind (Obj_Typ) = E_General_Access_Type,
Subtype_Indication => New_Reference_To (Desig_Typ, Loc)));
- Insert_Action (Ins_Nod, Ptr_Decl);
+ Insert_Action (Ins_Node, Ptr_Decl);
Analyze (Ptr_Decl);
-- Step 2: Create a temporary which acts as a hook to the transient
@@ -4495,16 +4495,16 @@ package body Exp_Ch4 is
Defining_Identifier => Temp_Id,
Object_Definition => New_Reference_To (Ptr_Id, Loc));
- Insert_Action (Ins_Nod, Temp_Decl);
+ Insert_Action (Ins_Node, Temp_Decl);
Analyze (Temp_Decl);
- -- Mark this temporary as created for the purposes of "exporting" the
+ -- Mark this temporary as created for the purposes of exporting the
-- transient declaration out of the Actions list. This signals the
-- machinery in Build_Finalizer to recognize this special case.
Set_Return_Flag_Or_Transient_Decl (Temp_Id, Decl);
- -- Step 3: "Hook" the transient object to the temporary
+ -- Step 3: Hook the transient object to the temporary
if Is_Access_Type (Obj_Typ) then
Expr := Convert_To (Ptr_Id, New_Reference_To (Obj_Id, Loc));
@@ -4526,6 +4526,8 @@ package body Exp_Ch4 is
Expression => Expr));
end Process_Transient_Object;
+ -- Local variables
+
Decl : Node_Id;
-- Start of processing for Expand_N_Expression_With_Actions
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 5f60779..90fb73e 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -4186,8 +4186,6 @@ package body Exp_Ch6 is
-- code will have the same semantics.
if Ekind (F) = E_In_Parameter
- and then not Is_Limited_Type (Etype (A))
- and then not Is_Tagged_Type (Etype (A))
and then not Is_By_Reference_Type (Etype (A))
and then
(not Is_Array_Type (Etype (A))
@@ -4197,9 +4195,10 @@ package body Exp_Ch6 is
Decl :=
Make_Object_Declaration (Loc,
Defining_Identifier => Temp,
- Constant_Present => True,
- Object_Definition => New_Occurrence_Of (Temp_Typ, Loc),
- Expression => New_A);
+ Constant_Present => True,
+ Object_Definition => New_Occurrence_Of (Temp_Typ, Loc),
+ Expression => New_A);
+
else
Decl :=
Make_Object_Renaming_Declaration (Loc,
@@ -4217,10 +4216,10 @@ package body Exp_Ch6 is
end loop;
-- Establish target of function call. If context is not assignment or
- -- declaration, create a temporary as a target. The declaration for
- -- the temporary may be subsequently optimized away if the body is a
- -- single expression, or if the left-hand side of the assignment is
- -- simple enough, i.e. an entity or an explicit dereference of one.
+ -- declaration, create a temporary as a target. The declaration for the
+ -- temporary may be subsequently optimized away if the body is a single
+ -- expression, or if the left-hand side of the assignment is simple
+ -- enough, i.e. an entity or an explicit dereference of one.
if Ekind (Subp) = E_Function then
if Nkind (Parent (N)) = N_Assignment_Statement
diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb
index 0eb8dce..53369ea 100644
--- a/gcc/ada/inline.adb
+++ b/gcc/ada/inline.adb
@@ -341,10 +341,12 @@ package body Inline is
if Is_Generic_Instance (Pack) then
null;
+ -- Do not inline the package if the subprogram is an init. proc
+ -- because in that case the body appears in the same unit that
+ -- declares the type, which will be compiled in any case.
+
elsif not Is_Inlined (Pack)
- and then
- (not Has_Completion (E)
- or else Is_Expression_Function (E))
+ and then not Is_Init_Proc (E)
then
Set_Is_Inlined (Pack);
Inlined_Bodies.Increment_Last;