diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/ada/gnat_rm.texi | 14 | ||||
-rw-r--r-- | gcc/ada/impunit.adb | 57 | ||||
-rw-r--r-- | gcc/ada/impunit.ads | 8 | ||||
-rw-r--r-- | gcc/ada/sem_ch10.adb | 21 |
5 files changed, 102 insertions, 11 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index aa81b60..e6bd4a2 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,18 @@ 2009-07-15 Robert Dewar <dewar@adacore.com> + * gnat_rm.texi: Document s-ststop.ads + + * impunit.ad: (Map_Array): New table of alternative names + (Get_Kind_Of_Unit): Return possible suggested alternative name + + * impunit.ads (Get_Kind_Of_Unit): Return possible suggested + alternative name. + + * sem_ch10.adb (Analalyze_With_Clause): Add name of possible + alternative unit if an implementation unit is with'ed. + +2009-07-15 Robert Dewar <dewar@adacore.com> + * gnat_ugn.texi: Minor updates. * snames.ads-tmpl: Minor comment updates for Ada 2005 fully implemented diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 3e85ef7..bc18c28 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -409,6 +409,7 @@ The GNAT Library * System.Pool_Local (s-pooloc.ads):: * System.Restrictions (s-restri.ads):: * System.Rident (s-rident.ads):: +* System.Strings.Stream_Ops (s-ststop.ads):: * System.Task_Info (s-tasinf.ads):: * System.Wch_Cnv (s-wchcnv.ads):: * System.Wch_Con (s-wchcon.ads):: @@ -13597,6 +13598,7 @@ of GNAT, and will generate a warning message. * System.Pool_Local (s-pooloc.ads):: * System.Restrictions (s-restri.ads):: * System.Rident (s-rident.ads):: +* System.Strings.Stream_Ops (s-ststop.ads):: * System.Task_Info (s-tasinf.ads):: * System.Wch_Cnv (s-wchcnv.ads):: * System.Wch_Con (s-wchcon.ads):: @@ -14939,6 +14941,18 @@ It is not normally necessary to @code{with} this generic package since the necessary instantiation is included in package System.Restrictions. +@node System.Strings.Stream_Ops (s-ststop.ads) +@section @code{System.Strings.Stream_Ops} (@file{s-ststop.ads}) +@cindex @code{System.Strings.Stream_Ops} (@file{s-ststop.ads}) +@cindex Stream operations +@cindex String stream operations + +@noindent +This package provides a set of stream subprograms for standard string types. +It is intended primarily to support implicit use of such subprograms when +stream attributes are applied to string types, but the subprograms in this +package can be used directly by application programs. + @node System.Task_Info (s-tasinf.ads) @section @code{System.Task_Info} (@file{s-tasinf.ads}) @cindex @code{System.Task_Info} (@file{s-tasinf.ads}) diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb index 4cf3e0c..94112ff 100644 --- a/gcc/ada/impunit.adb +++ b/gcc/ada/impunit.adb @@ -24,6 +24,7 @@ ------------------------------------------------------------------------------ with Atree; use Atree; +with Errout; use Errout; with Sinfo; use Sinfo; with Fname.UF; use Fname.UF; with Lib; use Lib; @@ -471,6 +472,42 @@ package body Impunit is "g-zspche", -- GNAT.Wide_Wide_Spelling_Checker "g-zstspl"); -- GNAT.Wide_Wide_String_Split + ----------------------- + -- Alternative Units -- + ----------------------- + + -- For some implementation units, there is a unit in the GNAT library + -- that has identical functionality that is usable. If we have such a + -- case we record the appropriate Unit name in Error_Msg_String. + + type Aunit_Record is record + Fname : String (1 .. 6); + Aname : String_Ptr; + end record; + + -- Array of alternative unit names + + Scasuti : aliased String := "GNAT.Case_Util"; + Sos_lib : aliased String := "GNAT.OS_Lib"; + Sregexp : aliased String := "GNAT.Regexp"; + Sregpat : aliased String := "GNAT.Regpat"; + Sstring : aliased String := "GNAT.Strings"; + Sstusta : aliased String := "GNAT.Task_Stack_Usage"; + Stasloc : aliased String := "GNAT.Task_Lock"; + Sutf_32 : aliased String := "GNAT.UTF_32"; + + -- Array giving mapping + + Map_Array : constant array (1 .. 8) of Aunit_Record := ( + ("casuti", Scasuti'Access), + ("os_lib", Sos_lib'Access), + ("regexp", Sregexp'Access), + ("regpat", Sregpat'Access), + ("string", Sstring'Access), + ("stusta", Sstusta'Access), + ("tasloc", Stasloc'Access), + ("utf_32", Sutf_32'Access)); + ---------------------- -- Get_Kind_Of_Unit -- ---------------------- @@ -479,6 +516,8 @@ package body Impunit is Fname : constant File_Name_Type := Unit_File_Name (U); begin + Error_Msg_Strlen := 0; + -- If length of file name is greater than 12, not predefined. -- The value 12 here is an 8 char name with extension .ads. @@ -559,7 +598,23 @@ package body Impunit is return Ada_95_Unit; end if; - -- All tests failed, this is definitely an implementation unit + -- All tests failed, this is definitely an implementation unit. See if + -- we have an alternative name. + + Get_Name_String (Fname); + + if Name_Len = 12 + and then Name_Buffer (1 .. 2) = "s-" + and then Name_Buffer (9 .. 12) = ".ads" + then + for J in Map_Array'Range loop + if Name_Buffer (3 .. 8) = Map_Array (J).Fname then + Error_Msg_Strlen := Map_Array (J).Aname'Length; + Error_Msg_String (1 .. Error_Msg_Strlen) := + Map_Array (J).Aname.all; + end if; + end loop; + end if; return Implementation_Unit; end Get_Kind_Of_Unit; diff --git a/gcc/ada/impunit.ads b/gcc/ada/impunit.ads index f5a706d..f342b79 100644 --- a/gcc/ada/impunit.ads +++ b/gcc/ada/impunit.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2007, Free Software Foundation, Inc. -- +-- Copyright (C) 2000-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- -- @@ -55,7 +55,11 @@ package Impunit is function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit; -- Given the unit number of a unit, this function determines the type - -- of the unit, as defined above. + -- of the unit, as defined above. If the result is Implementation_Unit, + -- then the name of a possible atlernative equivalent unit is placed in + -- Error_Msg_String/Slen on return. If there is no alternative name, or + -- if the result is not Implementation_Unit, then Error_Msg_Slen is zero + -- on return, indicating that no alternative name was found. function Is_Known_Unit (Nam : Node_Id) return Boolean; -- Nam is the possible name of a child unit, represented as a selected diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index a443e41..d3cab12 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -2334,12 +2334,10 @@ package body Sem_Ch10 is end if; -- Check for inappropriate with of internal implementation unit if we - -- are currently compiling the main unit and the main unit is itself - -- not an internal unit. We do not issue this message for implicit - -- with's generated by the compiler itself. + -- are not compiling an internal unit. We do not issue this message + -- for implicit with's generated by the compiler itself. if Implementation_Unit_Warnings - and then Current_Sem_Unit = Main_Unit and then not Intunit and then not Implicit_With (N) then @@ -2350,10 +2348,17 @@ package body Sem_Ch10 is begin if U_Kind = Implementation_Unit then Error_Msg_F ("& is an internal 'G'N'A'T unit?", Name (N)); - Error_Msg_F - ("\use of this unit is non-portable " & - "and version-dependent?", - Name (N)); + + -- Add alternative name if available, otherwise issue a + -- general warning message. + + if Error_Msg_Strlen /= 0 then + Error_Msg_F ("\use ""~"" instead", Name (N)); + else + Error_Msg_F + ("\use of this unit is non-portable " & + "and version-dependent?", Name (N)); + end if; elsif U_Kind = Ada_05_Unit and then Ada_Version < Ada_05 |