From 7c62a85a8dcec50e474c02525c5f165ad30cf2d9 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 5 Aug 2011 17:08:15 +0200 Subject: [PATCH] [multiple changes] 2011-08-05 Pascal Obry * a-iteint.ads: Fix copyright year. 2011-08-05 Thomas Quinot * 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 * 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 --- gcc/ada/ChangeLog | 18 ++++++++++++++++++ gcc/ada/a-iteint.ads | 2 +- gcc/ada/lib-xref-alfa.adb | 13 +++++++++---- gcc/ada/lib-xref.adb | 16 +++++++++++++++- gcc/ada/par_sco.adb | 13 +++++++++++-- 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 24fdf5c84fe..217b56da6eb 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,21 @@ +2011-08-05 Pascal Obry + + * a-iteint.ads: Fix copyright year. + +2011-08-05 Thomas Quinot + + * 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 + + * 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 * g-expect.adb: Minor reformatting. diff --git a/gcc/ada/a-iteint.ads b/gcc/ada/a-iteint.ads index 3e7e074cbb7..935cb2d1208 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 7c2d2750693..526fdb79360 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 a8d5e00bd01..8e607644a86 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 8f76dd25039..e4407f2963b 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 -- 2.30.2