[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 30 Jan 2012 11:33:53 +0000 (12:33 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 30 Jan 2012 11:33:53 +0000 (12:33 +0100)
2012-01-30  Vincent Celier  <celier@adacore.com>

* prj-nmsc.adb (Check_Interfaces): Report an error when a
unit from Library_Interface is not a unit of the project.

2012-01-30  Vincent Pucci  <pucci@adacore.com>

* sem_prag.adb (Make_Aspect_For_PPC_In_Gen_Sub_Decl): Parent
links fixed inside PPC pragmas.
* sem_ch12.adb: Move call to Make_Aspect_For_PPC_In_Gen_Sub_Decl.

2012-01-30  Thomas Quinot  <quinot@adacore.com>

* s-ransee.ads: Minor reformatting.

From-SVN: r183705

gcc/ada/ChangeLog
gcc/ada/prj-nmsc.adb
gcc/ada/s-ransee.ads
gcc/ada/sem_ch12.adb
gcc/ada/sem_prag.adb

index cfc585f626e7979e4d3644195b696e903b026ced..624aa117ef0ce3016fef70692043646d36d5491d 100644 (file)
@@ -1,3 +1,18 @@
+2012-01-30  Vincent Celier  <celier@adacore.com>
+
+       * prj-nmsc.adb (Check_Interfaces): Report an error when a
+       unit from Library_Interface is not a unit of the project.
+
+2012-01-30  Vincent Pucci  <pucci@adacore.com>
+
+       * sem_prag.adb (Make_Aspect_For_PPC_In_Gen_Sub_Decl): Parent
+       links fixed inside PPC pragmas.
+       * sem_ch12.adb: Move call to Make_Aspect_For_PPC_In_Gen_Sub_Decl.
+
+2012-01-30  Thomas Quinot  <quinot@adacore.com>
+
+       * s-ransee.ads: Minor reformatting.
+
 2012-01-30  Pascal Obry  <obry@adacore.com>
 
        * prj.ads, prj.adb (For_Each_Source): Add support for skipping
index 00cc88ad6e4a319b5a38216e248d79f43aa21cc7..0fbcd115f2d9ecaa7b6ba13a9ef0d28d7fd08d6b 100644 (file)
@@ -2556,6 +2556,8 @@ package body Prj.Nmsc is
 
       Interface_ALIs : String_List_Id := Nil_String;
 
+      Unit_Found : Boolean;
+
    begin
       if not Interfaces.Default then
 
@@ -2583,7 +2585,15 @@ package body Prj.Nmsc is
             Project_2 := Project;
             Big_Loop :
             while Project_2 /= No_Project loop
-               Iter := For_Each_Source (Data.Tree, Project_2);
+               if Project.Qualifier = Aggregate_Library then
+                  --  For an aggregate library we want to consider sources of
+                  --  all aggregated projects.
+
+                  Iter := For_Each_Source (Data.Tree);
+
+               else
+                  Iter := For_Each_Source (Data.Tree, Project_2);
+               end if;
 
                loop
                   Source := Prj.Element (Iter);
@@ -2680,11 +2690,20 @@ package body Prj.Nmsc is
             Get_Name_String (Element.Value);
             To_Lower (Name_Buffer (1 .. Name_Len));
             Name := Name_Find;
+            Unit_Found := False;
 
             Project_2 := Project;
             Big_Loop_2 :
             while Project_2 /= No_Project loop
-               Iter := For_Each_Source (Data.Tree, Project_2);
+               if Project.Qualifier = Aggregate_Library then
+                  --  For an aggregate library we want to consider sources of
+                  --  all aggregated projects.
+
+                  Iter := For_Each_Source (Data.Tree);
+
+               else
+                  Iter := For_Each_Source (Data.Tree, Project_2);
+               end if;
 
                loop
                   Source := Prj.Element (Iter);
@@ -2731,6 +2750,7 @@ package body Prj.Nmsc is
                           String_Element_Table.Last (Shared.String_Elements);
                      end if;
 
+                     Unit_Found := True;
                      exit Big_Loop_2;
                   end if;
 
@@ -2740,6 +2760,15 @@ package body Prj.Nmsc is
                Project_2 := Project_2.Extends;
             end loop Big_Loop_2;
 
+            if not Unit_Found then
+               Error_Msg_Name_1 := Name_Id (Name);
+
+               Error_Msg
+                 (Data.Flags,
+                  "%% is not a unit of this project",
+                  Element.Location, Project);
+            end if;
+
             List := Element.Next;
          end loop;
 
index ffae8323c04e9434801ef37c91533f69a30be5b6..d5414efcecefb4b6906a8455a56749989e7a6f48 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---               Copyright (C) 2011, Free Software Foundation, Inc.         --
+--            Copyright (C) 2011-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- --
@@ -36,7 +36,7 @@
 --  o  one based on Ada.Calendar
 --  o  one based on Ada.Real_Time
 
---  This is required because Ada.Calendar cannot be used on ravenscar, but
+--  This is required because Ada.Calendar cannot be used on Ravenscar, but
 --  Ada.Real_Time drags in the whole tasking runtime on regular platforms.
 
 package System.Random_Seed is
index 90ff36346e03bda45ed9f225dd6bebe3cd9404a4..34c100eb5452fa719c86135d16d93ffe2ec18b68 100644 (file)
@@ -3112,15 +3112,6 @@ package body Sem_Ch12 is
          end;
       end if;
 
-      --  For ASIS purposes, convert any postcondition, precondition pragmas
-      --  into aspects, if N is not a compilation unit by itself, in order to
-      --  enable the analysis of expressions inside the corresponding PPC
-      --  pragmas.
-
-      if ASIS_Mode and then Is_List_Member (N) then
-         Make_Aspect_For_PPC_In_Gen_Sub_Decl (N);
-      end if;
-
       Spec := Specification (N);
       Id := Defining_Entity (Spec);
       Generate_Definition (Id);
@@ -3216,6 +3207,15 @@ package body Sem_Ch12 is
 
       Save_Global_References (Original_Node (N));
 
+      --  For ASIS purposes, convert any postcondition, precondition pragmas
+      --  into aspects, if N is not a compilation unit by itself, in order to
+      --  enable the analysis of expressions inside the corresponding PPC
+      --  pragmas.
+
+      if ASIS_Mode and then Is_List_Member (N) then
+         Make_Aspect_For_PPC_In_Gen_Sub_Decl (N);
+      end if;
+
       --  To capture global references, analyze the expressions of aspects,
       --  and propagate information to original tree. Note that in this case
       --  analysis of attributes is not delayed until the freeze point.
index c0e0e582b1fdfc6d3e1b734977f0d0647ee1f5dd..326573f6aa8ca3a10613e1b60bc3fc98a6babc61 100644 (file)
@@ -15286,7 +15286,6 @@ package body Sem_Prag is
       Aspects : constant List_Id := New_List;
       Loc     : constant Source_Ptr := Sloc (Decl);
       Or_Decl : constant Node_Id := Original_Node (Decl);
-      Aspect  : Node_Id;
 
       Original_Aspects : List_Id;
       --  To capture global references, a copy of the created aspects must be
@@ -15309,16 +15308,19 @@ package body Sem_Prag is
 
                --  Make an aspect from any PPC pragma
 
-               Aspect :=
+               Append (
                  Make_Aspect_Specification (Loc,
                    Identifier =>
                      Make_Identifier (Loc, Chars (Pragma_Identifier (Prag))),
-                   Expression => Expression (Prag_Arg_Ass));
+                   Expression =>
+                     Copy_Separate_Tree (Expression (Prag_Arg_Ass))),
+                 Aspects);
 
-               Append (Aspect, Aspects);
-
-               --  Set the pragma node analyzed to avoid any further analysis
+               --  Generate the analysis information in the pragma expression
+               --  and then set the pragma node analyzed to avoid any further
+               --  analysis.
 
+               Analyze (Expression (Prag_Arg_Ass));
                Set_Analyzed (Prag, True);
 
             when others => null;