summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-29 13:20:27 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-29 13:20:27 +0000
commitb7edc5bbf7f1095d6bef337a223cf400adde46f1 (patch)
treec48d51fc9f53affdb580ed2ce609b90d8439b495
parentf1779f3415583dc735e019cbb646a34bc4f52600 (diff)
downloadgcc-b7edc5bbf7f1095d6bef337a223cf400adde46f1.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146961 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/ChangeLog11
-rw-r--r--gcc/ada/exp_ch9.adb26
-rw-r--r--gcc/ada/exp_ch9.ads9
-rw-r--r--gcc/ada/sem_ch3.adb15
4 files changed, 36 insertions, 25 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 1b40bd951b0..46a198f367f 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 f784e54ef3a..ddaa632f0ba 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 1cfa74d3635..8e795e12c0f 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 8f3d3f552ab..114e217986f 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;