aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2013-02-06 11:08:09 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2013-02-06 11:08:09 +0100
commit088c2c8d37175054fd0af5b58734a1fbf6ecebd1 (patch)
tree733480948945834a1fdc67db1c37ea5a489c0fd7 /gcc/ada
parent3860d46902591cda6423d375dd44975dec8bc6ea (diff)
downloadgcc-088c2c8d37175054fd0af5b58734a1fbf6ecebd1.zip
gcc-088c2c8d37175054fd0af5b58734a1fbf6ecebd1.tar.gz
gcc-088c2c8d37175054fd0af5b58734a1fbf6ecebd1.tar.bz2
[multiple changes]
2013-02-06 Robert Dewar <dewar@adacore.com> * s-dim.ads, clean.adb: Minor reformatting. 2013-02-06 Javier Miranda <miranda@adacore.com> * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Undo previous patch. (Can_Split_Unconstrained_Function): Only split the inlined function if the compiler generates the code of its body. From-SVN: r195789
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog10
-rw-r--r--gcc/ada/clean.adb4
-rw-r--r--gcc/ada/s-dim.ads2
-rw-r--r--gcc/ada/sem_ch6.adb18
4 files changed, 22 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 4ab64a9..309f7e7 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,15 @@
2013-02-06 Robert Dewar <dewar@adacore.com>
+ * s-dim.ads, clean.adb: Minor reformatting.
+
+2013-02-06 Javier Miranda <miranda@adacore.com>
+
+ * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Undo previous patch.
+ (Can_Split_Unconstrained_Function): Only split the inlined function if
+ the compiler generates the code of its body.
+
+2013-02-06 Robert Dewar <dewar@adacore.com>
+
* exp_prag.adb, sem_ch3.adb, exp_attr.adb, sem_prag.adb, sem_ch6.adb,
exp_intr.adb, exp_dist.adb, sem_ch13.adb: Internal clean up for
N_Pragma nodes.
diff --git a/gcc/ada/clean.adb b/gcc/ada/clean.adb
index e2d2446..9d9c4d4 100644
--- a/gcc/ada/clean.adb
+++ b/gcc/ada/clean.adb
@@ -1261,10 +1261,8 @@ package body Clean is
or else Host_Full_Name'Length = 0
then
Success := False;
-
else
- Delete_File
- (Host_Full_Name.all & ";*", Success);
+ Delete_File (Host_Full_Name.all & ";*", Success);
end if;
end;
diff --git a/gcc/ada/s-dim.ads b/gcc/ada/s-dim.ads
index 9896de8..f4b1003 100644
--- a/gcc/ada/s-dim.ads
+++ b/gcc/ada/s-dim.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2012, Free Software Foundation, Inc. --
+-- Copyright (C) 2012-2013, 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- --
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index b6db1ce..728e4a7 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -2909,10 +2909,6 @@ package body Sem_Ch6 is
and then Serious_Errors_Detected = 0
and then Present (Spec_Id)
and then Has_Pragma_Inline (Spec_Id)
-
- -- This test needs commenting ???
-
- and then In_Extended_Main_Code_Unit (N)
then
Check_And_Build_Body_To_Inline (N, Spec_Id, Body_Id);
end if;
@@ -4268,9 +4264,9 @@ package body Sem_Ch6 is
-- This body is subsequently used for inline expansions at call sites.
function Can_Split_Unconstrained_Function (N : Node_Id) return Boolean;
- -- Return true if the function body N has no local declarations and its
- -- unique statement is a single extended return statement with a handled
- -- statements sequence.
+ -- Return true if we generate code for the function body N, the function
+ -- body N has no local declarations and its unique statement is a single
+ -- extended return statement with a handled statements sequence.
function Check_Body_To_Inline
(N : Node_Id;
@@ -5005,7 +5001,13 @@ package body Sem_Ch6 is
end loop;
end if;
- return Present (Ret_Node)
+ -- We only split the inlined function when we are generating the code
+ -- of its body; otherwise we leave duplicated split subprograms in
+ -- the tree which (if referenced) generate wrong references at link
+ -- time.
+
+ return In_Extended_Main_Code_Unit (N)
+ and then Present (Ret_Node)
and then Nkind (Ret_Node) = N_Extended_Return_Statement
and then No (Next (Ret_Node))
and then Present (Handled_Statement_Sequence (Ret_Node));