OSDN Git Service

2011-08-05 Pascal Obry <obry@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Aug 2011 15:08:15 +0000 (15:08 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Aug 2011 15:08:15 +0000 (15:08 +0000)
* a-iteint.ads: Fix copyright year.

2011-08-05  Thomas Quinot  <quinot@adacore.com>

* par_sco.adb (Traverse_Declarations_Or_Statements): Do not generate a
statement SCO for a USE clause or a representation clause.

2011-08-05  Yannick Moy  <moy@adacore.com>

* lib-xref-alfa.adb (Collect_ALFA): generate the proper relation
between body and spec for stub.
(Detect_And_Add_ALFA_Scope): take into account subprogram stub
* lib-xref.adb (Enclosing_Subprogram_Or_Package): in the case of a
pragma precondition or postcondition, for which the enclosing
subprogram or package in the AST is not the desired one, return empty.

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

gcc/ada/ChangeLog
gcc/ada/a-iteint.ads
gcc/ada/lib-xref-alfa.adb
gcc/ada/lib-xref.adb
gcc/ada/par_sco.adb

index 24fdf5c..217b56d 100644 (file)
@@ -1,3 +1,21 @@
+2011-08-05  Pascal Obry  <obry@adacore.com>
+
+       * a-iteint.ads: Fix copyright year.
+
+2011-08-05  Thomas Quinot  <quinot@adacore.com>
+
+       * par_sco.adb (Traverse_Declarations_Or_Statements): Do not generate a
+       statement SCO for a USE clause or a representation clause.
+
+2011-08-05  Yannick Moy  <moy@adacore.com>
+
+       * lib-xref-alfa.adb (Collect_ALFA): generate the proper relation
+       between body and spec for stub.
+       (Detect_And_Add_ALFA_Scope): take into account subprogram stub
+       * lib-xref.adb (Enclosing_Subprogram_Or_Package): in the case of a
+       pragma precondition or postcondition, for which the enclosing
+       subprogram or package in the AST is not the desired one, return empty.
+
 2011-08-05  Thomas Quinot  <quinot@adacore.com>
 
        * g-expect.adb: Minor reformatting.
index 3e7e074..935cb2d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2004-2011, Free Software Foundation, Inc.         --
+--             Copyright (C) 2011, Free Software Foundation, Inc.           --
 --                                                                          --
 -- This specification is derived from the Ada Reference Manual for use with --
 -- GNAT. The copyright notice above, and the license provisions that follow --
index 7c2d275..526fdb7 100644 (file)
@@ -845,6 +845,9 @@ package body ALFA is
                if Present (Body_Entity) then
                   if Nkind (Body_Entity) = N_Defining_Program_Unit_Name then
                      Body_Entity := Parent (Body_Entity);
+                  elsif Nkind (Body_Entity) = N_Subprogram_Body_Stub then
+                     Body_Entity :=
+                       Proper_Body (Unit (Library_Unit (Body_Entity)));
                   end if;
 
                   Spec_Entity := Corresponding_Spec (Body_Entity);
@@ -874,10 +877,12 @@ package body ALFA is
 
    procedure Detect_And_Add_ALFA_Scope (N : Node_Id) is
    begin
-      if Nkind_In (N, N_Subprogram_Declaration,
-                      N_Subprogram_Body,
-                      N_Package_Declaration,
-                      N_Package_Body)
+      if Nkind_In (N,
+                   N_Subprogram_Declaration,
+                   N_Subprogram_Body,
+                   N_Subprogram_Body_Stub,
+                   N_Package_Declaration,
+                   N_Package_Body)
       then
          Add_ALFA_Scope (N);
       end if;
index a8d5e00..8e60764 100644 (file)
@@ -129,7 +129,7 @@ package body Lib.Xref is
    -------------------------------------
 
    function Enclosing_Subprogram_Or_Package (N : Node_Id) return Entity_Id is
-      Result         : Entity_Id;
+      Result : Entity_Id;
 
    begin
       --  If N is the defining identifier for a subprogram, then return the
@@ -167,6 +167,20 @@ package body Lib.Xref is
                Result := Defining_Unit_Name (Specification (Result));
                exit;
 
+            --  The enclosing subprogram for a pre- or postconditions should be
+            --  the subprogram to which the pragma is attached. This is not
+            --  always the case in the AST, as the pragma may be declared after
+            --  the declaration of the subprogram. Return Empty in this case.
+
+            when N_Pragma =>
+               if Get_Pragma_Id (Result) = Pragma_Precondition
+                 or else Get_Pragma_Id (Result) = Pragma_Postcondition
+               then
+                  return Empty;
+               else
+                  Result := Parent (Result);
+               end if;
+
             when others =>
                Result := Parent (Result);
          end case;
index 8f76dd2..e4407f2 100644 (file)
@@ -1483,7 +1483,8 @@ package body Par_SCO is
 
                when others =>
 
-                  --  Determine required type character code
+                  --  Determine required type character code, or ASCII.NUL if
+                  --  no SCO should be generated for this node.
 
                   declare
                      Typ : Character;
@@ -1505,11 +1506,19 @@ package body Par_SCO is
                         when N_Generic_Instantiation         =>
                            Typ := 'i';
 
+                        when
+                          N_Representation_Clause            |
+                          N_Use_Package_Clause               |
+                          N_Use_Type_Clause                  =>
+                           Typ := ASCII.NUL;
+
                         when others                          =>
                            Typ := ' ';
                      end case;
 
-                     Extend_Statement_Sequence (N, Typ);
+                     if Typ /= ASCII.NUL then
+                        Extend_Statement_Sequence (N, Typ);
+                     end if;
                   end;
 
                   --  Process any embedded decisions