[Ada] Fix for freezing of expression functions
authorJustin Squirek <squirek@adacore.com>
Fri, 25 May 2018 09:04:37 +0000 (09:04 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 25 May 2018 09:04:37 +0000 (09:04 +0000)
2018-05-25  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* exp_ch6.adb (Expand_Simple_Function_Return): Add guard in check to
generate code for 6.5(8-10) so that we don't get an assertion error
when dealing with an incomplete return type.

From-SVN: r260733

gcc/ada/ChangeLog
gcc/ada/exp_ch6.adb

index 256ecb83c6deb9e39437713e38f5e7d6ebd1505e..2e5fd67e46bc887e5629eaa7fd00583b1bdd370d 100644 (file)
@@ -1,3 +1,9 @@
+2018-05-25  Justin Squirek  <squirek@adacore.com>
+
+       * exp_ch6.adb (Expand_Simple_Function_Return): Add guard in check to
+       generate code for 6.5(8-10) so that we don't get an assertion error
+       when dealing with an incomplete return type.
+
 2018-05-25  Arnaud Charlet  <charlet@adacore.com>
 
        * pprint.adb (Expression_Name): Strip too long expressions to avoid
index 3395c2122fb97907cf05882ef3c70c67740fab0b..7c8ce026a5d1fad5fa3a89c67b0f5f042c3c58c2 100644 (file)
@@ -6759,7 +6759,13 @@ package body Exp_Ch6 is
       --  conversion or a formal parameter, because in that case the tag of
       --  the expression might differ from the tag of the specific result type.
 
-      if Is_Tagged_Type (Utyp)
+      --  We must also verify an underlying type exists for the return type in
+      --  case it is incomplete - in which case is not necessary to generate a
+      --  check anyway since an incomplete limited tagged return type would
+      --  qualify as a premature usage.
+
+      if Present (Utyp)
+        and then Is_Tagged_Type (Utyp)
         and then not Is_Class_Wide_Type (Utyp)
         and then (Nkind_In (Exp, N_Type_Conversion,
                                  N_Unchecked_Type_Conversion)