[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 1 Aug 2014 13:31:14 +0000 (15:31 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 1 Aug 2014 13:31:14 +0000 (15:31 +0200)
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

gcc/ada/ChangeLog
gcc/ada/sem_attr.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_res.adb

index d29f020193565c01ca884a543b91be2d17760972..c2bd64a47b2790923042f53c4086351fa31a2c21 100644 (file)
@@ -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.
index 599212facb0ca20e162ad52bd76f9cfe9d909c8c..904595e2fbddf7c95540a981325761646ceb7831 100644 (file)
@@ -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))
index 1fb0e7e1f58fc95ee5fab9d069dd03445c82118d..e6e35ab0d1d87fefc688bb57a139f3646db2a598 100644 (file)
@@ -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
index d2d7188e41eeede901bc1a36dc81d79d095da102..ac3acd428845649b54bd08ff880531c533be0d43 100644 (file)
@@ -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