diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-08-01 15:31:14 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-08-01 15:31:14 +0200 |
commit | b80a2b4bcc7e4a7c5282c78d6d96df185137ae34 (patch) | |
tree | b6d280d4cfd0b876e933c7610106b4c88591c8a0 /gcc/ada | |
parent | 4b259b2d0605d3da3357b46a35bd7ec92b1aaee1 (diff) | |
download | gcc-b80a2b4bcc7e4a7c5282c78d6d96df185137ae34.zip gcc-b80a2b4bcc7e4a7c5282c78d6d96df185137ae34.tar.gz gcc-b80a2b4bcc7e4a7c5282c78d6d96df185137ae34.tar.bz2 |
[multiple changes]
2014-08-01 Ed Schonberg <schonberg@adacore.com>
* 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 <schonberg@adacore.com>
* 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 <dewar@adacore.com>
* sem_attr.adb: Minor reformatting.
From-SVN: r213459
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/ada/sem_attr.adb | 21 | ||||
-rw-r--r-- | gcc/ada/sem_ch6.adb | 4 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 5 |
4 files changed, 31 insertions, 17 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d29f0201..c2bd64a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,21 @@ +2014-08-01 Ed Schonberg <schonberg@adacore.com> + + * 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 <schonberg@adacore.com> + + * 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 <dewar@adacore.com> + + * sem_attr.adb: Minor reformatting. + 2014-08-01 Vincent Celier <celier@adacore.com> * debug.adb: Minor documentation addition for -dn switch. diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 599212f..904595e 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 1fb0e7e..e6e35ab 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 d2d7188..ac3acd4 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 |