From b80a2b4bcc7e4a7c5282c78d6d96df185137ae34 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 1 Aug 2014 15:31:14 +0200 Subject: [PATCH] [multiple changes] 2014-08-01 Ed Schonberg * sem_res.adb (Check_Parameterless_Call): Use Relocate_Node to create the name of the parameterless call, rather than New_Copy, to preserve the tree structure when the name is a complex expression, e.g. a selected component that denotes a protected operation, whose prefix is itself a selected component. 2014-08-01 Ed Schonberg * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use Unit_Declaration_Node to retrieve body when inlining, to handle properly subprogram child units. 2014-08-01 Robert Dewar * sem_attr.adb: Minor reformatting. From-SVN: r213459 --- gcc/ada/ChangeLog | 18 ++++++++++++++++++ gcc/ada/sem_attr.adb | 21 +++++++-------------- gcc/ada/sem_ch6.adb | 4 ++-- gcc/ada/sem_res.adb | 5 ++++- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d29f0201935..c2bd64a47b2 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,21 @@ +2014-08-01 Ed Schonberg + + * sem_res.adb (Check_Parameterless_Call): Use Relocate_Node + to create the name of the parameterless call, rather than + New_Copy, to preserve the tree structure when the name is a + complex expression, e.g. a selected component that denotes a + protected operation, whose prefix is itself a selected component. + +2014-08-01 Ed Schonberg + + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use + Unit_Declaration_Node to retrieve body when inlining, to handle + properly subprogram child units. + +2014-08-01 Robert Dewar + + * sem_attr.adb: Minor reformatting. + 2014-08-01 Vincent Celier * debug.adb: Minor documentation addition for -dn switch. diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 599212facb0..904595e2fbd 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -2983,9 +2983,7 @@ package body Sem_Attr is -- because it was valid in the generic unit. Ditto if this is -- an inlining of a function declared in an instance. - if In_Instance - or else In_Inlined_Body - then + if In_Instance or else In_Inlined_Body then return; -- For sure OK if we have a real private type itself, but must @@ -3130,12 +3128,10 @@ package body Sem_Attr is -- The prefix denotes either the task type, or else a -- single task whose task type is being analyzed. - if (Is_Type (Tsk) - and then Tsk = S) - + if (Is_Type (Tsk) and then Tsk = S) or else (not Is_Type (Tsk) - and then Etype (Tsk) = S - and then not (Comes_From_Source (S))) + and then Etype (Tsk) = S + and then not (Comes_From_Source (S))) then null; else @@ -3166,7 +3162,6 @@ package body Sem_Attr is begin Get_First_Interp (P, Index, It); - while Present (It.Nam) loop if It.Nam = Ent then null; @@ -3241,9 +3236,7 @@ package body Sem_Attr is when Attribute_Descriptor_Size => Check_E0; - if not Is_Entity_Name (P) - or else not Is_Type (Entity (P)) - then + if not Is_Entity_Name (P) or else not Is_Type (Entity (P)) then Error_Attr_P ("prefix of attribute % must denote a type"); end if; @@ -3547,8 +3540,8 @@ package body Sem_Attr is if Etype (P) = Standard_Exception_Type then Set_Etype (N, RTE (RE_Exception_Id)); - -- Ada 2005 (AI-345): Attribute 'Identity may be applied to - -- task interface class-wide types. + -- Ada 2005 (AI-345): Attribute 'Identity may be applied to task + -- interface class-wide types. elsif Is_Task_Type (Etype (P)) or else (Is_Access_Type (Etype (P)) diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 1fb0e7e1f58..e6e35ab0d1d 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -3593,8 +3593,8 @@ package body Sem_Ch6 is else declare - Body_Spec : constant Node_Id := Parent (Body_Id); - Subp_Body : constant Node_Id := Parent (Body_Spec); + Subp_Body : constant Node_Id := + Unit_Declaration_Node (Body_Id); Subp_Decl : constant List_Id := Declarations (Subp_Body); begin diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index d2d7188e41e..ac3acd42884 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -1102,7 +1102,10 @@ package body Sem_Res is end if; end if; - Nam := New_Copy (N); + -- The node is the name of the parameterless call. Preserve its + -- descendants, which may be complex expressions. + + Nam := Relocate_Node (N); -- If overloaded, overload set belongs to new copy -- 2.30.2