]> gcc.gnu.org Git - gcc.git/commitdiff
sem_ch6.adb (Possible_Freeze): If the type is an incomplete CW type...
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 19 Apr 2016 13:02:27 +0000 (13:02 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 19 Apr 2016 13:02:27 +0000 (15:02 +0200)
2016-04-19  Eric Botcazou  <ebotcazou@adacore.com>

* sem_ch6.adb (Possible_Freeze): If the type is an incomplete
CW type, then the subprogram must have a delayed freeze. This
ensures that the backend can properly recover the full view when
elaborating the access subprogram declaration.

From-SVN: r235195

gcc/ada/ChangeLog
gcc/ada/sem_ch6.adb

index 08a4ef41d5fc076e872744e388cc0649ac3683e4..ca023c20eea963289fa661947c30fe3b6bae4cba 100644 (file)
@@ -1,3 +1,10 @@
+2016-04-19  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * sem_ch6.adb (Possible_Freeze): If the type is an incomplete
+       CW type, then the subprogram must have a delayed freeze. This
+       ensures that the backend can properly recover the full view when
+       elaborating the access subprogram declaration.
+
 2016-04-19  Ed Schonberg  <schonberg@adacore.com>
 
        * sem_attr.adb (Resolve_Attribute, case 'Access): Freeze
index 17e9fe19fe9b08769d294b4220f8121b9934d758..2fec97c49c0eb9ae9e7c27178548a4e54a5a778e 100644 (file)
@@ -5251,8 +5251,9 @@ package body Sem_Ch6 is
       --  T is the type of either a formal parameter or of the return type.
       --  If T is not yet frozen and needs a delayed freeze, then the
       --  subprogram itself must be delayed. If T is the limited view of an
-      --  incomplete type the subprogram must be frozen as well, because
-      --  T may depend on local types that have not been frozen yet.
+      --  incomplete type (or of a CW type thereof) the subprogram must be
+      --  frozen as well, because T may depend on local types that have not
+      --  been frozen yet.
 
       ---------------------
       -- Possible_Freeze --
@@ -5269,7 +5270,8 @@ package body Sem_Ch6 is
          then
             Set_Has_Delayed_Freeze (Designator);
 
-         elsif Ekind (T) = E_Incomplete_Type
+         elsif (Ekind (T) = E_Incomplete_Type
+                 or else Ekind (T) = E_Class_Wide_Type)
            and then From_Limited_With (T)
          then
             Set_Has_Delayed_Freeze (Designator);
This page took 0.0910570000000001 seconds and 5 git commands to generate.