From a52fefe6abf2bee1322d26f926541ed99d480617 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 22 Apr 2009 17:14:51 +0200 Subject: [PATCH] [multiple changes] 2009-04-22 Ed Schonberg * sem_res.adb: Create block around procedure call when actual is a concatenation. 2009-04-22 Thomas Quinot * s-soflin.ads: Fix typos 2009-04-22 Vincent Celier * prj-env.adb: Minor comment change * prj-nmsc.adb (Check_Common): Add guard to avoid calling Get_Name_String with No_File. * tempdir.adb (Create_Temp_File): Output diagnostic when temp file cannot be created even when not in verbose mode. From-SVN: r146587 --- gcc/ada/ChangeLog | 19 +++++++++++++++++++ gcc/ada/prj-env.adb | 7 ++++--- gcc/ada/prj-nmsc.adb | 6 ++++-- gcc/ada/s-soflin.ads | 4 ++-- gcc/ada/sem_res.adb | 14 +++++++++++++- gcc/ada/tempdir.adb | 5 +---- 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 235cf5386c6..8d822c71132 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,22 @@ +2009-04-22 Ed Schonberg + + * sem_res.adb: Create block around procedure call when actual is a + concatenation. + +2009-04-22 Thomas Quinot + + * s-soflin.ads: Fix typos + +2009-04-22 Vincent Celier + + * prj-env.adb: Minor comment change + + * prj-nmsc.adb (Check_Common): Add guard to avoid calling + Get_Name_String with No_File. + + * tempdir.adb (Create_Temp_File): Output diagnostic when temp file + cannot be created even when not in verbose mode. + 2009-04-22 Emmanuel Briot * make.adb, prj-env.adb, prj-env.ads, prj-nmsc.adb, prj.adb, diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb index 3b0b1e51e00..a56ce931fff 100644 --- a/gcc/ada/prj-env.adb +++ b/gcc/ada/prj-env.adb @@ -1246,9 +1246,10 @@ package body Prj.Env is GNAT.OS_Lib.Close (File, Status); if not Status then - Prj.Com.Fail ("disk full, could not create mapping file"); - -- Do we know this is disk full? Or could it be e.g. a protection - -- problem of some kind preventing creation of the file ??? + Prj.Com.Fail ("disk full, could not write mapping file"); + -- We were able to create the temporary file, so there is no problem + -- of protection. However, we are not able to close it, so there must + -- be a capacity problem that we express using "disk full". end if; end Create_Mapping_File; diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb index daff8ef30ee..46f14a8b036 100644 --- a/gcc/ada/prj-nmsc.adb +++ b/gcc/ada/prj-nmsc.adb @@ -2909,8 +2909,10 @@ package body Prj.Nmsc is end; end if; - Write_Attr - ("Dot_Replacement", Get_Name_String (Dot_Replacement)); + if Dot_Replacement /= No_File then + Write_Attr + ("Dot_Replacement", Get_Name_String (Dot_Replacement)); + end if; Casing_Defined := False; diff --git a/gcc/ada/s-soflin.ads b/gcc/ada/s-soflin.ads index 6c868cd6ced..16b483b28b8 100644 --- a/gcc/ada/s-soflin.ads +++ b/gcc/ada/s-soflin.ads @@ -207,11 +207,11 @@ package System.Soft_Links is -- Locked_Processing : begin -- System.Soft_Links.Lock_Task.all; -- ... - -- System.Soft_Links..Unlock_Task.all; + -- System.Soft_Links.Unlock_Task.all; -- -- exception -- when others => - -- System.Soft_Links..Unlock_Task.all; + -- System.Soft_Links.Unlock_Task.all; -- raise; -- end Locked_Processing; -- diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index e166954e390..4a664562a23 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2009, 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- -- @@ -3170,6 +3170,18 @@ package body Sem_Res is then Establish_Transient_Scope (A, False); + -- A small optimization: if one of the actuals is a concatenation + -- create a block around a procedure call to recover stack space. + -- This alleviates stack usage when several procedure calls in + -- the same statement list use concatenation. + + elsif Nkind (A) = N_Op_Concat + and then Nkind (N) = N_Procedure_Call_Statement + and then Expander_Active + then + Establish_Transient_Scope (A, False); + Resolve (A, Etype (F)); + else if Nkind (A) = N_Type_Conversion and then Is_Array_Type (Etype (F)) diff --git a/gcc/ada/tempdir.adb b/gcc/ada/tempdir.adb index 1612140b3ec..b4433075080 100644 --- a/gcc/ada/tempdir.adb +++ b/gcc/ada/tempdir.adb @@ -94,10 +94,7 @@ package body Tempdir is end if; if FD = Invalid_FD then - if Verbose_Mode then - Write_Line ("could not create temporary file in " & Directory); - end if; - + Write_Line ("could not create temporary file in " & Directory); Name := No_Path; else