From 320fbd1ebe24af4b2059759e7432e4c294eb9170 Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Fri, 25 May 2018 09:04:37 +0000 Subject: [PATCH] [Ada] Fix for freezing of expression functions 2018-05-25 Justin Squirek 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 | 6 ++++++ gcc/ada/exp_ch6.adb | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 256ecb8..2e5fd67 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2018-05-25 Justin Squirek + + * 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 * pprint.adb (Expression_Name): Strip too long expressions to avoid diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 3395c21..7c8ce02 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -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) -- 2.7.4