diff options
-rw-r--r-- | gcc/ada/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/ada/exp_ch9.adb | 26 | ||||
-rw-r--r-- | gcc/ada/exp_ch9.ads | 9 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 15 |
4 files changed, 36 insertions, 25 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1b40bd9..46a198f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index f784e54..ddaa632 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -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 diff --git a/gcc/ada/exp_ch9.ads b/gcc/ada/exp_ch9.ads index 1cfa74d..8e795e1 100644 --- a/gcc/ada/exp_ch9.ads +++ b/gcc/ada/exp_ch9.ads @@ -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 diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 8f3d3f5..114e217 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -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; |