OSDN Git Service

2009-04-29 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 13:20:27 +0000 (13:20 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 13:20:27 +0000 (13:20 +0000)
* exp_ch9.ads, exp_ch9.adb (Build_Wrapper_Spec): Use source line of
primitive operation, rather than source line of synchronized type, when
building the wrapper for a primitive operation that overrides an
operation inherited from a progenitor, to improve the error message on
duplicate declarations.

* sem_ch3.adb (Process_Full_View): Use new signature of
Build_Wrapper_Spec.

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

gcc/ada/ChangeLog
gcc/ada/exp_ch9.adb
gcc/ada/exp_ch9.ads
gcc/ada/sem_ch3.adb

index 1b40bd9..46a198f 100644 (file)
@@ -1,3 +1,14 @@
+2009-04-29  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch9.ads, exp_ch9.adb (Build_Wrapper_Spec): Use source line of
+       primitive operation, rather than source line of synchronized type, when
+       building the wrapper for a primitive operation that overrides an
+       operation inherited from a progenitor, to improve the error message on
+       duplicate declarations.
+
+       * sem_ch3.adb (Process_Full_View): Use new signature of
+       Build_Wrapper_Spec.
+
 2009-04-29  Robert Dewar  <dewar@adacore.com>
 
        * prj-nmsc.ads: Minor reformatting
index f784e54..ddaa632 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-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- --
@@ -1599,7 +1599,7 @@ package body Exp_Ch9 is
          Body_Spec : Node_Id;
 
       begin
-         Body_Spec := Build_Wrapper_Spec (Loc, Subp_Id, Obj_Typ, Formals);
+         Body_Spec := Build_Wrapper_Spec (Subp_Id, Obj_Typ, Formals);
 
          --  The subprogram is not overriding or is not a primitive declared
          --  between two views.
@@ -1776,11 +1776,11 @@ package body Exp_Ch9 is
    ------------------------
 
    function Build_Wrapper_Spec
-     (Loc     : Source_Ptr;
-      Subp_Id : Entity_Id;
+     (Subp_Id : Entity_Id;
       Obj_Typ : Entity_Id;
       Formals : List_Id) return Node_Id
    is
+      Loc           : constant Source_Ptr := Sloc (Subp_Id);
       First_Param   : Node_Id;
       Iface         : Entity_Id;
       Iface_Elmt    : Elmt_Id;
@@ -2147,18 +2147,18 @@ package body Exp_Ch9 is
                  and then Ekind (Defining_Identifier (Decl)) = E_Entry
                then
                   Wrap_Spec :=
-                    Build_Wrapper_Spec (Loc,
-                      Subp_Id => Defining_Identifier (Decl),
-                      Obj_Typ => Rec_Typ,
-                      Formals => Parameter_Specifications (Decl));
+                    Build_Wrapper_Spec
+                      (Subp_Id => Defining_Identifier (Decl),
+                       Obj_Typ => Rec_Typ,
+                       Formals => Parameter_Specifications (Decl));
 
                elsif Nkind (Decl) = N_Subprogram_Declaration then
                   Wrap_Spec :=
-                    Build_Wrapper_Spec (Loc,
-                      Subp_Id => Defining_Unit_Name (Specification (Decl)),
-                      Obj_Typ => Rec_Typ,
-                      Formals =>
-                        Parameter_Specifications (Specification (Decl)));
+                    Build_Wrapper_Spec
+                      (Subp_Id => Defining_Unit_Name (Specification (Decl)),
+                       Obj_Typ => Rec_Typ,
+                       Formals =>
+                         Parameter_Specifications (Specification (Decl)));
                end if;
 
                if Present (Wrap_Spec) then
index 1cfa74d..8e795e1 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-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- --
@@ -154,8 +154,7 @@ package Exp_Ch9 is
    --  Build_Task_Allocate_Block.
 
    function Build_Wrapper_Spec
-     (Loc     : Source_Ptr;
-      Subp_Id : Entity_Id;
+     (Subp_Id : Entity_Id;
       Obj_Typ : Entity_Id;
       Formals : List_Id) return Node_Id;
    --  Ada 2005 (AI-345): Build the specification of a primitive operation
@@ -203,7 +202,9 @@ package Exp_Ch9 is
    --  routine to make sure Complete_Master is called on exit).
 
    procedure Expand_Access_Protected_Subprogram_Type (N : Node_Id);
-   --  Build Equivalent_Type for an Access_to_protected_Subprogram
+   --  Build Equivalent_Type for an Access_To_Protected_Subprogram.
+   --  Equivalent_Type is a record type with two components: a pointer
+   --  to the protected object, and a pointer to the operation itself.
 
    procedure Expand_Accept_Declarations (N : Node_Id; Ent : Entity_Id);
    --  Expand declarations required for accept statement. See bodies of
index 8f3d3f5..114e217 100644 (file)
@@ -16262,7 +16262,6 @@ package body Sem_Ch3 is
                   declare
                      Conc_Typ  : constant Entity_Id :=
                                    Corresponding_Record_Type (Full_T);
-                     Loc       : constant Source_Ptr := Sloc (Conc_Typ);
                      Curr_Nod  : Node_Id := Parent (Conc_Typ);
                      Wrap_Spec : Node_Id;
 
@@ -16274,14 +16273,14 @@ package body Sem_Ch3 is
                           and then not Is_Abstract_Subprogram (Prim)
                         then
                            Wrap_Spec :=
-                             Make_Subprogram_Declaration (Loc,
+                             Make_Subprogram_Declaration (Sloc (Prim),
                                Specification =>
-                                 Build_Wrapper_Spec (Loc,
-                                   Subp_Id => Prim,
-                                   Obj_Typ => Conc_Typ,
-                                   Formals =>
-                                     Parameter_Specifications (
-                                       Parent (Prim))));
+                                 Build_Wrapper_Spec
+                                   (Subp_Id => Prim,
+                                    Obj_Typ => Conc_Typ,
+                                    Formals =>
+                                      Parameter_Specifications (
+                                        Parent (Prim))));
 
                            Insert_After (Curr_Nod, Wrap_Spec);
                            Curr_Nod := Wrap_Spec;