From 088c2c8d37175054fd0af5b58734a1fbf6ecebd1 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 6 Feb 2013 11:08:09 +0100 Subject: [PATCH] [multiple changes] 2013-02-06 Robert Dewar * s-dim.ads, clean.adb: Minor reformatting. 2013-02-06 Javier Miranda * 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 --- gcc/ada/ChangeLog | 10 ++++++++++ gcc/ada/clean.adb | 4 +--- gcc/ada/s-dim.ads | 2 +- gcc/ada/sem_ch6.adb | 18 ++++++++++-------- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 4ab64a9e9236..309f7e7c4fb9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2013-02-06 Robert Dewar + + * s-dim.ads, clean.adb: Minor reformatting. + +2013-02-06 Javier Miranda + + * 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 * exp_prag.adb, sem_ch3.adb, exp_attr.adb, sem_prag.adb, sem_ch6.adb, diff --git a/gcc/ada/clean.adb b/gcc/ada/clean.adb index e2d2446e500f..9d9c4d457df1 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 9896de8dd79a..f4b10030a1f5 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 b6db1ce6be62..728e4a7a8d7b 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));