[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 9 Jul 2009 10:17:40 +0000 (12:17 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 9 Jul 2009 10:17:40 +0000 (12:17 +0200)
2009-07-09  Ed Schonberg  <schonberg@adacore.com>

* freeze.adb (Freeze_Expression): If the expression is the name of a
function in a call, and the function has not been frozen yet, create
extra formals for it to ensure that the proper actuals are created
when expanding the call.

2009-07-09  Emmanuel Briot  <briot@adacore.com>

* prj-pp.adb (Print): Fix handling of source index when set on a
declaration node.

From-SVN: r149408

gcc/ada/ChangeLog
gcc/ada/freeze.adb
gcc/ada/prj-pp.adb

index 78006e575b2244cb2f348d81236749bc093e30eb..296c04dc1760039909ccac25c21ab8f16ad5b483 100644 (file)
@@ -1,3 +1,15 @@
+2009-07-09  Ed Schonberg  <schonberg@adacore.com>
+
+       * freeze.adb (Freeze_Expression): If the expression is the name of a
+       function in a call, and the function has not been frozen yet, create
+       extra formals for it to ensure that the proper actuals are created
+       when expanding the call.
+
+2009-07-09  Emmanuel Briot  <briot@adacore.com>
+
+       * prj-pp.adb (Print): Fix handling of source index when set on a
+       declaration node.
+
 2009-07-09  Ed Schonberg  <schonberg@adacore.com>
 
        * einfo.ads, einfo.adb: New attribute Related_Expression, used to link
index 5a7d0ef47dee7d358c187e00a635f1fcd739a5ac..fffb33f1e531cbc50d3321574b9acc52224f7682 100644 (file)
@@ -4012,6 +4012,12 @@ package body Freeze is
       --  designated type is a private type without full view, the expression
       --  cannot contain an allocator, so the type is not frozen.
 
+      --  For a function, we freeze the entity when the subprogram declaration
+      --  is frozen, but a function call may appear in an initialization proc.
+      --  before the  declaration  is frozen. We need to generate  the extra
+      --  formals, if any, to ensure that the expansion of the call includes
+      --  the proper actuals.
+
       Desig_Typ := Empty;
 
       case Nkind (N) is
@@ -4033,6 +4039,14 @@ package body Freeze is
                Desig_Typ := Designated_Type (Etype (Prefix (N)));
             end if;
 
+         when N_Identifier =>
+            if Present (Nam)
+              and then Ekind (Nam) = E_Function
+              and then Nkind (Parent (N)) = N_Function_Call
+            then
+               Create_Extra_Formals (Nam);
+            end if;
+
          when others =>
             null;
       end case;
index 5ddafbc7799717266cdb7ba3043562b5594c52f6..cc88f8e5eb5e96ae268e59eb9dd7570365781ed4 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2001-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 2001-2009, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -517,7 +517,7 @@ package body Prj.PP is
                   Output_String (String_Value_Of (Node, In_Tree));
 
                   if Source_Index_Of (Node, In_Tree) /= 0 then
-                     Write_String (" at ");
+                     Write_String (" at");
                      Write_String (Source_Index_Of (Node, In_Tree)'Img);
                   end if;
 
@@ -532,12 +532,6 @@ package body Prj.PP is
                      Write_String (" (");
                      Output_String
                        (Associative_Array_Index_Of (Node, In_Tree));
-
-                     if Source_Index_Of (Node, In_Tree) /= 0 then
-                        Write_String (" at ");
-                        Write_String (Source_Index_Of (Node, In_Tree)'Img);
-                     end if;
-
                      Write_String (")");
                   end if;
 
@@ -580,6 +574,11 @@ package body Prj.PP is
                      Output_Attribute_Name (Name_Of (Node, In_Tree));
                   end if;
 
+                  if Source_Index_Of (Node, In_Tree) /= 0 then
+                     Write_String (" at");
+                     Write_String (Source_Index_Of (Node, In_Tree)'Img);
+                  end if;
+
                   Write_String (";");
                   Write_End_Of_Line_Comment (Node);
                   Print (First_Comment_After (Node, In_Tree), Indent);