aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-08-05 17:08:15 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-08-05 17:08:15 +0200
commit7c62a85a8dcec50e474c02525c5f165ad30cf2d9 (patch)
tree737eee92b2b21ab528f2d75e8945e71bb4885eb4
parente49208a9cb1d63270a57c501eb94cce668d2c750 (diff)
downloadgcc-7c62a85a8dcec50e474c02525c5f165ad30cf2d9.zip
gcc-7c62a85a8dcec50e474c02525c5f165ad30cf2d9.tar.gz
gcc-7c62a85a8dcec50e474c02525c5f165ad30cf2d9.tar.bz2
[multiple changes]
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. From-SVN: r177450
-rw-r--r--gcc/ada/ChangeLog18
-rw-r--r--gcc/ada/a-iteint.ads2
-rw-r--r--gcc/ada/lib-xref-alfa.adb13
-rw-r--r--gcc/ada/lib-xref.adb16
-rw-r--r--gcc/ada/par_sco.adb13
5 files changed, 54 insertions, 8 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 24fdf5c..217b56d 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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.
diff --git a/gcc/ada/a-iteint.ads b/gcc/ada/a-iteint.ads
index 3e7e074..935cb2d 100644
--- a/gcc/ada/a-iteint.ads
+++ b/gcc/ada/a-iteint.ads
@@ -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 --
diff --git a/gcc/ada/lib-xref-alfa.adb b/gcc/ada/lib-xref-alfa.adb
index 7c2d275..526fdb7 100644
--- a/gcc/ada/lib-xref-alfa.adb
+++ b/gcc/ada/lib-xref-alfa.adb
@@ -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;
diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb
index a8d5e00..8e60764 100644
--- a/gcc/ada/lib-xref.adb
+++ b/gcc/ada/lib-xref.adb
@@ -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;
diff --git a/gcc/ada/par_sco.adb b/gcc/ada/par_sco.adb
index 8f76dd2..e4407f2 100644
--- a/gcc/ada/par_sco.adb
+++ b/gcc/ada/par_sco.adb
@@ -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