diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2013-02-06 11:08:09 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2013-02-06 11:08:09 +0100 |
commit | 088c2c8d37175054fd0af5b58734a1fbf6ecebd1 (patch) | |
tree | 733480948945834a1fdc67db1c37ea5a489c0fd7 /gcc/ada | |
parent | 3860d46902591cda6423d375dd44975dec8bc6ea (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/ada/clean.adb | 4 | ||||
-rw-r--r-- | gcc/ada/s-dim.ads | 2 | ||||
-rw-r--r-- | gcc/ada/sem_ch6.adb | 18 |
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)); |