2009-07-27 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Jul 2009 13:39:44 +0000 (13:39 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Jul 2009 13:39:44 +0000 (13:39 +0000)
* g-sse.ads: Minor reformatting

2009-07-27  Arnaud Charlet  <charlet@adacore.com>

* xref_lib.adb (Add_Xref_File_Internal, Find_ALI_Files): Add support for
alternate ali extension.
* xr_tabls.adb (ALI_File_Name, Get_File, Set_Unvisited): Take into
account Osint.ALI_Suffix.
* osint.ads (ALI_Suffix): Make visible.
* gnatfind.adb (Gnatfind): Add support for --ext= switch.
* gnat_ugn.texi: Document new gnatfind --ext= switch.

2009-07-27  Ed Schonberg  <schonberg@adacore.com>

* sem.adb (Walk_Library_Items): If main unit is an instance body, do
its spec first.

2009-07-27  Javier Miranda  <miranda@adacore.com>

* exp_disp.adb (Expand_Dispatching_Call): Generate the SCIL node after
the dispatching call has is expanded.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150115 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/exp_disp.adb
gcc/ada/g-sse.ads
gcc/ada/gnat_ugn.texi
gcc/ada/gnatfind.adb
gcc/ada/osint.ads
gcc/ada/sem.adb
gcc/ada/xr_tabls.adb
gcc/ada/xref_lib.adb

index 45ce028..ca9285d 100644 (file)
@@ -1,3 +1,27 @@
+2009-07-27  Robert Dewar  <dewar@adacore.com>
+
+       * g-sse.ads: Minor reformatting
+
+2009-07-27  Arnaud Charlet  <charlet@adacore.com>
+
+       * xref_lib.adb (Add_Xref_File_Internal, Find_ALI_Files): Add support for
+       alternate ali extension.
+       * xr_tabls.adb (ALI_File_Name, Get_File, Set_Unvisited): Take into
+       account Osint.ALI_Suffix.
+       * osint.ads (ALI_Suffix): Make visible.
+       * gnatfind.adb (Gnatfind): Add support for --ext= switch.
+       * gnat_ugn.texi: Document new gnatfind --ext= switch.
+
+2009-07-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem.adb (Walk_Library_Items): If main unit is an instance body, do
+       its spec first.
+
+2009-07-27  Javier Miranda  <miranda@adacore.com>
+
+       * exp_disp.adb (Expand_Dispatching_Call): Generate the SCIL node after
+       the dispatching call has is expanded.
+
 2009-07-27  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_attr.adb (Expand_Attribute_Reference, case 'Valid): Reset the
index df23c89..010e6bf 100644 (file)
@@ -643,17 +643,6 @@ package body Exp_Disp is
          Typ := Non_Limited_View (Typ);
       end if;
 
-      --  Generate the SCIL node for this dispatching call
-
-      if Generate_SCIL then
-         Insert_Action (Call_Node,
-           New_SCIL_Node
-             (SN_Kind      => Dispatching_Call,
-              Related_Node => Call_Node,
-              Entity       => Typ,
-              Target_Prim  => Subp));
-      end if;
-
       if not Is_Limited_Type (Typ) then
          Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq);
       end if;
@@ -877,6 +866,17 @@ package body Exp_Disp is
       --  to avoid the generation of spurious warnings under ZFP run-time.
 
       Analyze_And_Resolve (Call_Node, Call_Typ, Suppress => All_Checks);
+
+      --  Generate the SCIL node for this dispatching call
+
+      if Generate_SCIL then
+         Insert_Action (Call_Node,
+           New_SCIL_Node
+             (SN_Kind      => Dispatching_Call,
+              Related_Node => Call_Node,
+              Entity       => Typ,
+              Target_Prim  => Subp));
+      end if;
    end Expand_Dispatching_Call;
 
    ---------------------------------
index 8ce2b5d..04eb6d5 100644 (file)
@@ -30,8 +30,8 @@
 ------------------------------------------------------------------------------
 
 --  This package is the root of a set aimed at offering Ada bindings to a
---  subset of the Intel(r) Streaming SIMD Extensions with GNAT. The purpose is
---  to allow access from Ada to the SSE facilities defined in the Intel(r)
+--  subset of the Intel(r) Streaming SIMD Extensions with GNAT. The purpose
+--  is to allow access from Ada to the SSE facilities defined in the Intel(r)
 --  compiler manuals, in particular in the Intrinsics Reference of the C++
 --  Compiler User's Guide, available from http://www.intel.com.
 
index a1bb7bf..e18a16c 100644 (file)
@@ -15590,6 +15590,13 @@ Do not look for sources in the system default directory.
 @cindex @option{-nostdlib} (@command{gnatfind})
 Do not look for library files in the system default directory.
 
+@item --ext=@var{extension}
+@cindex @option{--ext} (@command{gnatfind})
+Specify an alternate ali file extension. The default is @code{ali} and other
+extensions (e.g. @code{sli} for SPARK library files) may be specified via this
+switch. Note that if this switch overrides the default, which means that only
+the new extension will be considered.
+
 @item --RTS=@var{rts-path}
 @cindex @option{--RTS} (@command{gnatfind})
 Specifies the default location of the runtime library. Same meaning as the
index 69415ef..45bc5ee 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1998-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1998-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- --
@@ -64,6 +64,9 @@ procedure Gnatfind is
    RTS_Specified : String_Access := null;
    --  Used to detect multiple use of --RTS= switch
 
+   EXT_Specified : String_Access := null;
+   --  Used to detect multiple use of --ext= switch
+
    procedure Parse_Cmd_Line;
    --  Parse every switch on the command line
 
@@ -95,7 +98,7 @@ procedure Gnatfind is
       loop
          case
            GNAT.Command_Line.Getopt
-             ("a aI: aO: d e f g h I: nostdinc nostdlib p: r s t -RTS=")
+             ("a aI: aO: d e f g h I: nostdinc nostdlib p: r s t -RTS= -ext=")
          is
             when ASCII.NUL =>
                exit;
@@ -155,44 +158,71 @@ procedure Gnatfind is
             --  Only switch starting with -- recognized is --RTS
 
             when '-'    =>
-               --  Check that it is the first time we see this switch
-
-               if RTS_Specified = null then
-                  RTS_Specified := new String'(GNAT.Command_Line.Parameter);
-
-               elsif RTS_Specified.all /= GNAT.Command_Line.Parameter then
-                  Osint.Fail ("--RTS cannot be specified multiple times");
-               end if;
 
-               Opt.No_Stdinc := True;
-               Opt.RTS_Switch := True;
+               if GNAT.Command_Line.Full_Switch = "-RTS" then
+                  --  Check that it is the first time we see this switch
 
-               declare
-                  Src_Path_Name : constant String_Ptr :=
-                                    Get_RTS_Search_Dir
-                                      (GNAT.Command_Line.Parameter, Include);
-                  Lib_Path_Name : constant String_Ptr :=
-                                    Get_RTS_Search_Dir
-                                      (GNAT.Command_Line.Parameter, Objects);
-
-               begin
-                  if Src_Path_Name /= null and then Lib_Path_Name /= null then
-                     Add_Search_Dirs (Src_Path_Name, Include);
-                     Add_Search_Dirs (Lib_Path_Name, Objects);
+                  if RTS_Specified = null then
+                     RTS_Specified := new String'(GNAT.Command_Line.Parameter);
 
-                  elsif Src_Path_Name = null and then Lib_Path_Name = null then
-                     Osint.Fail ("RTS path not valid: missing " &
-                                 "adainclude and adalib directories");
+                  elsif RTS_Specified.all /= GNAT.Command_Line.Parameter then
+                     Osint.Fail ("--RTS cannot be specified multiple times");
+                  end if;
 
-                  elsif Src_Path_Name = null then
-                     Osint.Fail ("RTS path not valid: missing " &
-                                 "adainclude directory");
+                  Opt.No_Stdinc := True;
+                  Opt.RTS_Switch := True;
+
+                  declare
+                     Src_Path_Name : constant String_Ptr :=
+                                       Get_RTS_Search_Dir
+                                         (GNAT.Command_Line.Parameter,
+                                          Include);
+                     Lib_Path_Name : constant String_Ptr :=
+                                       Get_RTS_Search_Dir
+                                         (GNAT.Command_Line.Parameter,
+                                          Objects);
+
+                  begin
+                     if Src_Path_Name /= null
+                       and then Lib_Path_Name /= null
+                     then
+                        Add_Search_Dirs (Src_Path_Name, Include);
+                        Add_Search_Dirs (Lib_Path_Name, Objects);
+
+                     elsif Src_Path_Name = null
+                       and then Lib_Path_Name = null
+                     then
+                        Osint.Fail ("RTS path not valid: missing " &
+                                      "adainclude and adalib directories");
+
+                     elsif Src_Path_Name = null then
+                        Osint.Fail ("RTS path not valid: missing " &
+                                      "adainclude directory");
+
+                     elsif Lib_Path_Name = null then
+                        Osint.Fail ("RTS path not valid: missing " &
+                                      "adalib directory");
+                     end if;
+                  end;
+               elsif GNAT.Command_Line.Full_Switch = "-ext" then
+                  --  Check that it is the first time we see this switch
+
+                  if EXT_Specified = null then
+                     EXT_Specified := new String'(GNAT.Command_Line.Parameter);
+
+                  elsif EXT_Specified.all /= GNAT.Command_Line.Parameter then
+                     Osint.Fail ("--ext cannot be specified multiple times");
+                  end if;
 
-                  elsif Lib_Path_Name = null then
-                     Osint.Fail ("RTS path not valid: missing " &
-                                 "adalib directory");
+                  if EXT_Specified'Length
+                    = Osint.ALI_Default_Suffix'Length
+                  then
+                     Osint.ALI_Suffix := EXT_Specified.all'Access;
+                  else
+                     Osint.Fail ("--ext argument must have 3 characters");
                   end if;
-               end;
+
+               end if;
 
             when others =>
                Write_Usage;
@@ -281,6 +311,7 @@ procedure Gnatfind is
                 & " directory");
       Put_Line ("   -nostdlib Don't look for library files in the system"
                 & " default directory");
+      Put_Line ("   --ext=xxx Specify alternate ali file extension");
       Put_Line ("   --RTS=dir specify the default source and object search"
                 & " path");
       Put_Line ("   -p file   Use file as the default project file");
index 5de8ece..5ddda47 100644 (file)
@@ -571,11 +571,12 @@ package Osint is
    pragma Import (C, Len_Arg, "__gnat_len_arg");
    --  Get length of argument
 
-private
-
-   ALI_Suffix : constant String_Ptr := new String'("ali");
+   ALI_Default_Suffix : constant String_Ptr := new String'("ali");
+   ALI_Suffix : String_Ptr := ALI_Default_Suffix;
    --  The suffix used for the library files (also known as ALI files)
 
+private
+
    Current_Main : File_Name_Type := No_File;
    --  Used to save a simple file name between calls to Next_Main_Source and
    --  Read_Source_File. If the file name argument to Read_Source_File is
index 69c4497..6f68bdd 100644 (file)
@@ -1762,7 +1762,7 @@ package body Sem is
             if Nkind (Item) = N_Package_Declaration then
                Body_Unit := Library_Unit (CU);
 
-            elsif Nkind (Item) = N_Package_Body then
+            elsif Nkind_In (Item, N_Package_Body, N_Subprogram_Body) then
                Body_Unit := CU;
             end if;
 
@@ -1860,7 +1860,26 @@ package body Sem is
 
       if not Done (Main_Unit) then
          Do_Main := True;
-         Do_Unit_And_Dependents (Cunit (Main_Unit), Unit (Cunit (Main_Unit)));
+
+         declare
+            Main_CU : constant Node_Id := Cunit (Main_Unit);
+
+         begin
+
+            --  If the main unit is an instantiation, the body appears
+            --  before the instance spec, which is added later to the
+            --  unit list. Do the spec if present, body will follow.
+
+            if Nkind (Original_Node (Unit (Main_CU)))
+            in N_Generic_Instantiation
+              and then Present (Library_Unit (Main_CU))
+            then
+               Do_Unit_And_Dependents
+              (Library_Unit (Main_CU), Unit (Library_Unit (Main_CU)));
+            else
+               Do_Unit_And_Dependents (Main_CU, Unit (Main_CU));
+            end if;
+         end;
       end if;
 
       if Debug_Unit_Walk then
index 82b2e7d..30a4ecc 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1998-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1998-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- --
@@ -495,9 +495,10 @@ package body Xr_Tabls is
 
    begin
       if Index /= 0 then
-         return Ada_File_Name (Ada_File_Name'First .. Index) & "ali";
+         return Ada_File_Name (Ada_File_Name'First .. Index)
+           & Osint.ALI_Suffix.all;
       else
-         return Ada_File_Name & ".ali";
+         return Ada_File_Name & "." & Osint.ALI_Suffix.all;
       end if;
    end ALI_File_Name;
 
@@ -823,7 +824,9 @@ package body Xr_Tabls is
       end if;
 
       if File.Dir = null then
-         if Ada.Strings.Fixed.Tail (File.File.all, 3) = "ali" then
+         if Ada.Strings.Fixed.Tail (File.File.all, 3)
+           = Osint.ALI_Suffix.all
+         then
             Tmp := Locate_Regular_File
               (Internal_Strip (File.File.all), Directories.Obj_Dir);
          else
@@ -1392,7 +1395,7 @@ package body Xr_Tabls is
       --  least for gnatxref, and probably for gnatfind as well
 
       if F'Length > 4
-        and then F (F'Last - 3 .. F'Last) = ".ali"
+        and then F (F'Last - 3 .. F'Last) = "." & Osint.ALI_Suffix.all
       then
          Unvisited_Files := new Unvisited_Files_Record'
            (File => File_Ref,
index 9352913..475f15e 100644 (file)
@@ -308,7 +308,7 @@ package body Xref_Lib is
          --  Case where we have an ALI file, accept it even though this is
          --  not official usage, since the intention is obvious
 
-         if Tail (File, 4) = ".ali" then
+         if Tail (File, 4) = "." & Osint.ALI_Suffix.all then
             File_Ref := Add_To_Xref_File
                           (File, Visited => False, Emit_Warning => True);
 
@@ -466,7 +466,9 @@ package body Xref_Lib is
                   return;
                end if;
 
-            elsif Last > 4 and then Dir_Ent (Last - 3 .. Last) = ".ali" then
+            elsif Last > 4
+              and then Dir_Ent (Last - 3 .. Last) = "." & Osint.ALI_Suffix.all
+            then
                File_Ref :=
                  Add_To_Xref_File (Dir_Ent (1 .. Last), Visited => False);
             end if;