[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 22 Feb 2012 14:03:25 +0000 (15:03 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 22 Feb 2012 14:03:25 +0000 (15:03 +0100)
2012-02-22  Pascal Obry  <obry@adacore.com>

* s-taprop-mingw.adb (Finalize_TCB): Do not wait on thread handle as
this is our own thread.

2012-02-22  Sergey Rybin  <rybin@adacore.com frybin>

* tree_io.ads: Update ASIS_Version_Number because of the changes
in Snames.

2012-02-22  Hristian Kirtchev  <kirtchev@adacore.com>

* exp_ch7.adb (Create_Finalizer): Suppress elaboration checks on
stack-related finalizers.

2012-02-22  Ed Schonberg  <schonberg@adacore.com>

* sem_ch6.adb (Analyze_Expression_Function): If the construct
is a completion, indicate that its formals are the formals of
a completion, and as such do not get a cross- reference entry.
(Analyze_Subprogram_Specification): Do not generate a definition
for the entity of an expression function, because it may be a
completion. Definition will be generated if needed when analyzing
the generated subprogram declaration.

2012-02-22  Vincent Celier  <celier@adacore.com>

* make.adb (Check): When checking if an object file is in the
correct object directory, get the unit name from a previous call
to Check_Source_Info_In_ALI.
* makeutl.adb (Check_Source_Info_In_ALI): Return the name of
the unit when everything is OK, otherwise return No_Name.
* makeutl.ads (Check_Source_Info_In_ALI): Return Name_Id instead
of Boolean

2012-02-22  Ed Schonberg  <schonberg@adacore.com>

* sem_ch4.adb (Find_Equality_Types, Try_One_Interp): In an
instance, the operator is visible if an operand is of some
numeric type which is not in use or directly visible, and the
other operand is a numeric literal.

2012-02-22  Tristan Gingold  <gingold@adacore.com>

* init.c: Minor code clean up.
* gcc-interface/Make-lang.in: Update dependencies.

2012-02-22  Arnaud Charlet  <charlet@adacore.com>

* gnatlink.adb (Gnatlink): Use -gnatcC in CodePeer_Node,
otherwise GCC will generate an object file.

2012-02-22  Vincent Celier  <celier@adacore.com>

* projects.texi: Correct typo related to "**" in Source_Dirs.

From-SVN: r184477

13 files changed:
gcc/ada/ChangeLog
gcc/ada/exp_ch7.adb
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gnatlink.adb
gcc/ada/init.c
gcc/ada/make.adb
gcc/ada/makeutl.adb
gcc/ada/makeutl.ads
gcc/ada/projects.texi
gcc/ada/s-taprop-mingw.adb
gcc/ada/sem_ch4.adb
gcc/ada/sem_ch6.adb
gcc/ada/tree_io.ads

index 5f8a264cd374df35a8b18035253b65b441482a71..05784e68d5ec6d55fd1cec0f858c03be4a22b091 100644 (file)
@@ -1,3 +1,59 @@
+2012-02-22  Pascal Obry  <obry@adacore.com>
+
+       * s-taprop-mingw.adb (Finalize_TCB): Do not wait on thread handle as
+       this is our own thread.
+
+2012-02-22  Sergey Rybin  <rybin@adacore.com frybin>
+
+       * tree_io.ads: Update ASIS_Version_Number because of the changes
+       in Snames.
+
+2012-02-22  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * exp_ch7.adb (Create_Finalizer): Suppress elaboration checks on 
+       stack-related finalizers.
+
+2012-02-22  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch6.adb (Analyze_Expression_Function): If the construct
+       is a completion, indicate that its formals are the formals of
+       a completion, and as such do not get a cross- reference entry.
+       (Analyze_Subprogram_Specification): Do not generate a definition
+       for the entity of an expression function, because it may be a
+       completion. Definition will be generated if needed when analyzing
+       the generated subprogram declaration.
+
+2012-02-22  Vincent Celier  <celier@adacore.com>
+
+       * make.adb (Check): When checking if an object file is in the
+       correct object directory, get the unit name from a previous call
+       to Check_Source_Info_In_ALI.
+       * makeutl.adb (Check_Source_Info_In_ALI): Return the name of
+       the unit when everything is OK, otherwise return No_Name.
+       * makeutl.ads (Check_Source_Info_In_ALI): Return Name_Id instead
+       of Boolean
+
+2012-02-22  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch4.adb (Find_Equality_Types, Try_One_Interp): In an
+       instance, the operator is visible if an operand is of some
+       numeric type which is not in use or directly visible, and the
+       other operand is a numeric literal.
+
+2012-02-22  Tristan Gingold  <gingold@adacore.com>
+
+       * init.c: Minor code clean up.
+       * gcc-interface/Make-lang.in: Update dependencies.
+
+2012-02-22  Arnaud Charlet  <charlet@adacore.com>
+
+       * gnatlink.adb (Gnatlink): Use -gnatcC in CodePeer_Node,
+       otherwise GCC will generate an object file.
+
+2012-02-22  Vincent Celier  <celier@adacore.com>
+
+       * projects.texi: Correct typo related to "**" in Source_Dirs.
+
 2012-02-22  Steve Baird  <baird@adacore.com>
 
        * sem_prag.adb (Analyze_PPC_In_Decl_Part): Clean up generation of
index 9aac12304835d9ebd753145fd68f28fe36b91bcc..7f5fcaaf90d94867263277bd5760e1d51430e36b 100644 (file)
@@ -1372,6 +1372,37 @@ package body Exp_Ch7 is
             Fin_Id :=
               Make_Defining_Identifier (Loc,
                 Chars => New_External_Name (Name_uFinalizer));
+
+            --  The visibility semantics of AT_END handlers force a strange
+            --  separation of spec and body for stack-related finalizers:
+
+            --     declare : Enclosing_Scope
+            --        procedure _finalizer;
+            --     begin
+            --        <controlled objects>
+            --        procedure _finalizer is
+            --           ...
+            --     at end
+            --        _finalizer;
+            --     end;
+
+            --  Both spec and body are within the same construct and scope, but
+            --  the body is part of the handled sequence of statements. This
+            --  placement confuses the elaboration mechanism on targets where
+            --  AT_END handlers are expanded into "when all others" handlers:
+
+            --     exception
+            --        when all others =>
+            --           _finalizer;  --  appears to require elab checks
+            --     at end
+            --        _finalizer;
+            --     end;
+
+            --  Since the compiler guarantees that the body of a _finalizer is
+            --  always inserted in the same construct where the AT_END handler
+            --  resides, there is no need for elaboration checks.
+
+            Set_Kill_Elaboration_Checks (Fin_Id);
          end if;
 
          --  Step 2: Creation of the finalizer specification
index 46ee5434429542f83275493ff0c1620495025291..06a88030bdb979fa7ed23962191bda5d05c6ed51 100644 (file)
@@ -2079,19 +2079,20 @@ ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
    ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
    ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \
-   ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
-   ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads \
-   ada/exp_ch4.ads ada/exp_ch5.ads ada/exp_ch5.adb ada/exp_ch6.ads \
-   ada/exp_ch7.ads ada/exp_dbug.ads ada/exp_disp.ads ada/exp_pakd.ads \
-   ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/expander.ads \
-   ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \
-   ada/gnat.ads ada/g-hesorg.ads ada/g-htable.ads ada/hlo.ads \
-   ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
-   ada/lib.ads ada/lib-load.ads ada/lib-util.ads ada/lib-xref.ads \
-   ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
-   ada/nmake.adb ada/opt.ads ada/output.ads ada/put_alfa.ads \
-   ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
-   ada/scans.ads ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \
+   ada/elists.ads ada/err_vars.ads ada/errout.ads ada/errout.adb \
+   ada/erroutc.ads ada/erroutc.adb ada/eval_fat.ads ada/exp_aggr.ads \
+   ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch4.ads ada/exp_ch5.ads \
+   ada/exp_ch5.adb ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_dbug.ads \
+   ada/exp_disp.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \
+   ada/exp_util.adb ada/expander.ads ada/fname.ads ada/fname-uf.ads \
+   ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesorg.ads \
+   ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads ada/hostparm.ads \
+   ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \
+   ada/lib-load.ads ada/lib-util.ads ada/lib-xref.ads ada/namet.ads \
+   ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
+   ada/opt.ads ada/output.ads ada/put_alfa.ads ada/restrict.ads \
+   ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \
+   ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \
    ada/sem_aux.adb ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch11.ads \
    ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch13.adb ada/sem_ch2.ads \
    ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads \
@@ -4338,29 +4339,30 @@ ada/sem_dim.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads \
    ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
    ada/err_vars.ads ada/errout.ads ada/errout.adb ada/erroutc.ads \
-   ada/erroutc.adb ada/exp_tss.ads ada/expander.ads ada/fname.ads \
-   ada/gnat.ads ada/g-hesorg.ads ada/g-htable.ads ada/gnatvsn.ads \
-   ada/hlo.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \
-   ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \
-   ada/lib-sort.adb ada/namet.ads ada/namet.adb ada/nlists.ads \
-   ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
-   ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \
-   ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \
-   ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads ada/sem_ch13.ads \
-   ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads \
-   ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_ch9.ads \
-   ada/sem_dim.ads ada/sem_dim.adb ada/sem_eval.ads ada/sem_prag.ads \
-   ada/sem_res.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \
-   ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
-   ada/stringt.adb ada/stylesw.ads ada/system.ads ada/s-exctab.ads \
-   ada/s-htable.ads ada/s-htable.adb ada/s-imenne.ads ada/s-memory.ads \
-   ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
-   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
-   ada/s-stoele.adb ada/s-strhas.ads ada/s-string.ads ada/s-traent.ads \
-   ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
-   ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
-   ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
-   ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
+   ada/erroutc.adb ada/exp_dist.ads ada/exp_tss.ads ada/expander.ads \
+   ada/fname.ads ada/fname-uf.ads ada/gnat.ads ada/g-hesorg.ads \
+   ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads ada/hostparm.ads \
+   ada/inline.ads ada/interfac.ads ada/lib.ads ada/lib.adb \
+   ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/namet.ads \
+   ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
+   ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
+   ada/rtsfind.ads ada/rtsfind.adb ada/scans.ads ada/sem.ads ada/sem.adb \
+   ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch10.ads ada/sem_ch11.ads \
+   ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch2.ads ada/sem_ch3.ads \
+   ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads \
+   ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_dim.ads ada/sem_dim.adb \
+   ada/sem_dist.ads ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads \
+   ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+   ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+   ada/stylesw.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
+   ada/s-htable.adb ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+   ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+   ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+   ada/s-strhas.ads ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+   ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \
+   ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+   ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
 
 ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
index 9a1aab4c071acd35fcd199d3d2e103f35313c7fd..09ce5bb0f5d4d636a0f91f7c651ad9c79d75da85 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1996-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1996-2012, 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- --
@@ -1653,7 +1653,7 @@ begin
    --             because bindgen uses brackets encoding for all upper
    --             half and wide characters in identifier names.
 
-   --  In addition, in CodePeer mode compile with -gnatC
+   --  In addition, in CodePeer mode compile with -gnatcC
 
    Binder_Options_From_ALI.Increment_Last;
    Binder_Options_From_ALI.Table (Binder_Options_From_ALI.Last) :=
@@ -1668,7 +1668,7 @@ begin
    if Opt.CodePeer_Mode then
       Binder_Options_From_ALI.Increment_Last;
       Binder_Options_From_ALI.Table (Binder_Options_From_ALI.Last) :=
-           new String'("-gnatC");
+           new String'("-gnatcC");
    end if;
 
    --  Locate all the necessary programs and verify required files are present
index c2fd46b893fc43df19a980e2d2b0b4a97a697383..18280c28ca96ad650e1af41997076741bffe7211 100644 (file)
@@ -1239,8 +1239,6 @@ static const struct cond_except dec_ada_cond_except_table [] = {
   {ADA$_KEY_MISMATCH,    &Use_Error},
   {ADA$_MAXLINEXC,       &constraint_error},
   {ADA$_LINEXCMRS,       &constraint_error},
-  {0,                    0}
-};
 
 #if 0
    /* Already handled by a pragma Import_Exception
@@ -1250,6 +1248,9 @@ static const struct cond_except dec_ada_cond_except_table [] = {
   {ADA$_KEY_ERROR,       &Key_Error},
 #endif
 
+  {0,                    0}
+};
+
 #endif /* IN_RTS */
 
 /* Non-DEC Ada specific conditions.  We could probably also put
index dd211cb4857d3d22f7240102e54b2b4525bacf2d..0b1cd09b44c336d17d7b6afca80fdf6e740362f8 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, 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- --
@@ -1863,44 +1863,44 @@ package body Make is
                end if;
 
             elsif not Read_Only and then Main_Project /= No_Project then
-               if not Check_Source_Info_In_ALI (ALI, Project_Tree) then
-                  ALI := No_ALI_Id;
-                  return;
-               end if;
+               declare
+                  Uname : constant Name_Id :=
+                    Check_Source_Info_In_ALI (ALI, Project_Tree);
 
-               --  Check that the ALI file is in the correct object directory.
-               --  If it is in the object directory of a project that is
-               --  extended and it depends on a source that is in one of its
-               --  extending projects, then the ALI file is not in the correct
-               --  object directory.
+                  Udata : Prj.Unit_Index;
 
-               --  First, find the project of this ALI file. As there may be
-               --  several projects with the same object directory, we first
-               --  need to find the project of the source.
+               begin
+                  if Uname = No_Name then
+                     ALI := No_ALI_Id;
+                     return;
+                  end if;
 
-               ALI_Project := No_Project;
+                  --  Check that the ALI file is in the correct object
+                  --  directory. If it is in the object directory of a project
+                  --  that is extended and it depends on a source that is in
+                  --  one of its extending projects, then the ALI file is not
+                  --  in the correct object directory.
 
-               declare
-                  Udata : Prj.Unit_Index;
+                  --  First, find the project of this ALI file. As there may be
+                  --  several projects with the same object directory, we first
+                  --  need to find the project of the source.
 
-               begin
-                  Udata := Units_Htable.Get_First (Project_Tree.Units_HT);
-                  while Udata /= No_Unit_Index loop
+                  ALI_Project := No_Project;
+
+                  Udata := Units_Htable.Get (Project_Tree.Units_HT, Uname);
+
+                  if Udata /= No_Unit_Index then
                      if Udata.File_Names (Impl) /= null
                        and then Udata.File_Names (Impl).File = Source_File
                      then
                         ALI_Project := Udata.File_Names (Impl).Project;
-                        exit;
 
                      elsif Udata.File_Names (Spec) /= null
                        and then Udata.File_Names (Spec).File = Source_File
                      then
                         ALI_Project := Udata.File_Names (Spec).Project;
-                        exit;
                      end if;
-
-                     Udata := Units_Htable.Get_Next (Project_Tree.Units_HT);
-                  end loop;
+                  end if;
                end;
 
                if ALI_Project = No_Project then
index 413fb6a0b7a89d97b9fc60e130d59e25cc3f9916..bc3a0ee1409e7e5095f225efb4023197fe2c9c5c 100644 (file)
@@ -186,8 +186,9 @@ package body Makeutl is
 
    function Check_Source_Info_In_ALI
      (The_ALI : ALI_Id;
-      Tree    : Project_Tree_Ref) return Boolean
+      Tree    : Project_Tree_Ref) return Name_Id
    is
+      Result    : Name_Id := No_Name;
       Unit_Name : Name_Id;
 
    begin
@@ -203,7 +204,11 @@ package body Makeutl is
          Unit_Name := Name_Find;
 
          if File_Not_A_Source_Of (Tree, Unit_Name, Units.Table (U).Sfile) then
-            return False;
+            return No_Name;
+         end if;
+
+         if Result = No_Name then
+            Result := Unit_Name;
          end if;
 
          --  Loop to do same check for each of the withed units
@@ -219,7 +224,7 @@ package body Makeutl is
                   Unit_Name := Name_Find;
 
                   if File_Not_A_Source_Of (Tree, Unit_Name, WR.Sfile) then
-                     return False;
+                     return No_Name;
                   end if;
                end if;
             end;
@@ -258,7 +263,7 @@ package body Makeutl is
                               Get_Name_String (Replacement));
                         end if;
 
-                        return False;
+                        return No_Name;
                      end if;
                   end;
                end if;
@@ -294,14 +299,14 @@ package body Makeutl is
                            & " parsing the project. Will recompile");
                      end if;
 
-                     return False;
+                     return No_Name;
                   end if;
                end if;
             end if;
          end;
       end loop;
 
-      return True;
+      return Result;
    end Check_Source_Info_In_ALI;
 
    --------------------------------
index 402c92dde4975f0a95bce30d2f579ad7fbe9c70e..3ddb2085dd8293c7e66aa17b620725cf24e68921 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2004-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 2004-2012, 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- --
@@ -123,10 +123,10 @@ package Makeutl is
 
    function Check_Source_Info_In_ALI
      (The_ALI      : ALI.ALI_Id;
-      Tree         : Project_Tree_Ref) return Boolean;
+      Tree         : Project_Tree_Ref) return Name_Id;
    --  Check whether all file references in ALI are still valid (i.e. the
-   --  source files are still associated with the same units). Return True
-   --  if everything is still valid.
+   --  source files are still associated with the same units). Return the name
+   --  of the unit if everything is still valid. Return No_Name otherwise.
 
    function Is_Subunit (Source : Source_Id) return Boolean;
    --  Return True if source is a subunit
index 88a623d4c316d9cba4ec1f6ef3e59a97ae2205ce..fd0de1bb8f2088feb2f1baaff129caf8e3898fe5 100644 (file)
@@ -403,12 +403,12 @@ If the order of the source directories is known statically, that is if
 be several files with the same source file name sitting in different
 directories of the project. In this case, only the file in the first directory
 is considered as a source of the project and the others are hidden. If
-@code{"**"} is not used in the string list @code{Source_Dirs}, it is an error
+@code{"**"} is used in the string list @code{Source_Dirs}, it is an error
 to have several files with the same source file name in the same directory
 @code{"**"} subtree, since there would be an ambiguity as to which one should
-be used. However, two files with the same source file name may in two single
-directories or directory subtrees. In this case, the one in the first directory
-or directory subtree is a source of the project.
+be used. However, two files with the same source file name may exist in two
+single directories or directory subtrees. In this case, the one in the first
+directory or directory subtree is a source of the project.
 
 @c ---------------------------------------------
 @node Object and Exec Directory
index 50723076122f1c2232013004bd8653c4bf455875..2aa5fd7c0b6310ed6548f4b926f081a34f148c6c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                  B o d y                                 --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNARL 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- --
@@ -41,13 +41,13 @@ pragma Polling (Off);
 with Interfaces.C;
 with Interfaces.C.Strings;
 
+with System.Float_Control;
+with System.Interrupt_Management;
 with System.Multiprocessors;
-with System.Tasking.Debug;
 with System.OS_Primitives;
 with System.Task_Info;
-with System.Interrupt_Management;
+with System.Tasking.Debug;
 with System.Win32.Ext;
-with System.Float_Control;
 
 with System.Soft_Links;
 --  We use System.Soft_Links instead of System.Tasking.Initialization because
@@ -59,14 +59,14 @@ package body System.Task_Primitives.Operations is
 
    package SSL renames System.Soft_Links;
 
-   use System.Tasking.Debug;
-   use System.Tasking;
    use Interfaces.C;
    use Interfaces.C.Strings;
    use System.OS_Interface;
-   use System.Parameters;
    use System.OS_Primitives;
+   use System.Parameters;
    use System.Task_Info;
+   use System.Tasking;
+   use System.Tasking.Debug;
    use System.Win32;
    use System.Win32.Ext;
 
@@ -979,7 +979,6 @@ package body System.Task_Primitives.Operations is
    ------------------
 
    procedure Finalize_TCB (T : Task_Id) is
-      Result    : DWORD;
       Succeeded : BOOL;
 
    begin
@@ -995,11 +994,9 @@ package body System.Task_Primitives.Operations is
 
       if T.Common.LL.Thread /= 0 then
 
-         --  This task has been activated. Wait for the thread to terminate
-         --  then close it. This is needed to release system resources.
+         --  This task has been activated. Close the thread handle. This
+         --  is needed to release system resources.
 
-         Result := WaitForSingleObject (T.Common.LL.Thread, Wait_Infinite);
-         pragma Assert (Result /= WAIT_FAILED);
          Succeeded := CloseHandle (T.Common.LL.Thread);
          pragma Assert (Succeeded = Win32.TRUE);
       end if;
index 32300126b48a3da6eaaecafa575cbe0fc845027d..2b343aa0c4ca824d052d5c4365de1ce189fe5e70 100644 (file)
@@ -5545,7 +5545,9 @@ package body Sem_Ch4 is
 
          --  If we have infix notation, the operator must be usable.
          --  Within an instance, if the type is already established we
-         --  know it is correct.
+         --  know it is correct. If an operand is universal it is compatible
+         --  with any numeric type.
+
          --  In Ada 2005, the equality on anonymous access types is declared
          --  in Standard, and is always visible.
 
@@ -5554,8 +5556,13 @@ package body Sem_Ch4 is
            or else In_Use (Bas)
            or else (In_Use (Scope (Bas))
                      and then not Is_Hidden (Bas))
+
            or else (In_Instance
-                     and then First_Subtype (T1) = First_Subtype (Etype (R)))
+                    and then
+                      (First_Subtype (T1) = First_Subtype (Etype (R))
+                       or else (Is_Numeric_Type (T1)
+                         and then Is_Universal_Numeric_Type (Etype (R)))))
+
            or else Ekind (T1) = E_Anonymous_Access_Type
          then
             null;
index 8df63dc958a1367aa0e3628d953c4c193cc7d2f0..fecf5f036ba90beb95c6cd31a1ded5fe3ef42cf7 100644 (file)
@@ -273,7 +273,6 @@ package body Sem_Ch6 is
       Spec     : constant Node_Id    := Specification (N);
 
       Def_Id :  Entity_Id;
-      pragma Unreferenced (Def_Id);
 
       Prev :  Entity_Id;
       --  If the expression is a completion, Prev is the entity whose
@@ -371,6 +370,26 @@ package body Sem_Ch6 is
 
          if Has_Completion (Prev) then
             Set_Is_Inlined (Prev);
+
+            --  The formals of the expression function are body formals,
+            --  and do not appear in the ali file, which will only contain
+            --  references to the formals of the original subprogram spec.
+
+            declare
+               F1 : Entity_Id;
+               F2 : Entity_Id;
+
+            begin
+               F1 := First_Formal (Def_Id);
+               F2 := First_Formal (Prev);
+
+               while Present (F1) loop
+                  Set_Spec_Entity (F1, F2);
+                  Next_Formal (F1);
+                  Next_Formal (F2);
+               end loop;
+            end;
+
          else
             Set_Is_Inlined (Defining_Entity (New_Body));
          end if;
@@ -3198,8 +3217,12 @@ package body Sem_Ch6 is
       end if;
 
       Designator := Analyze_Subprogram_Specification (Specification (N));
+
+      --  A reference may already have been generated for the unit name, in
+      --  which case the following call is redundant. However it is needed for
+      --  declarations that are the rewriting of an expression function.
+
       Generate_Definition (Designator);
-      --  ??? why this call, already in Analyze_Subprogram_Specification
 
       if Debug_Flag_C then
          Write_Str ("==> subprogram spec ");
@@ -3399,9 +3422,15 @@ package body Sem_Ch6 is
          Check_SPARK_Restriction ("user-defined operator is not allowed", N);
       end if;
 
-      --  Proceed with analysis
+      --  Proceed with analysis. Do not emit a cross-reference entry if the
+      --  specification comes from an expression function, because it may be
+      --  the completion of a previous declaration. It is is not, the cross-
+      --  reference entry will be emitted for the new subprogram declaration.
+
+      if Nkind (Parent (N)) /= N_Expression_Function then
+         Generate_Definition (Designator);
+      end if;
 
-      Generate_Definition (Designator);
       Set_Contract (Designator, Make_Contract (Sloc (Designator)));
 
       if Nkind (N) = N_Function_Specification then
index 982943628e793dfea0b3fb1a3bb4913796f03e92..12c1ae545fe8e681211d9fc2b2ea869633e8a3fa 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, 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- --
@@ -47,7 +47,7 @@ package Tree_IO is
    Tree_Format_Error : exception;
    --  Raised if a format error is detected in the input file
 
-   ASIS_Version_Number : constant := 27;
+   ASIS_Version_Number : constant := 28;
    --  ASIS Version. This is used to check for consistency between the compiler
    --  used to generate trees and an ASIS application that is reading the
    --  trees. It must be incremented whenever a change is made to the tree
@@ -55,6 +55,7 @@ package Tree_IO is
    --  older version of ASIS.
    --
    --  27  Changes in the tree structures for expression functions
+   --  28  Changes in Snames
 
    procedure Tree_Read_Initialize (Desc : File_Descriptor);
    --  Called to initialize reading of a tree file. This call must be made