From eb077d7047629d5704338270ca57b64272627268 Mon Sep 17 00:00:00 2001 From: Gary Dismukes Date: Thu, 25 Mar 2021 13:37:58 -0400 Subject: [PATCH] [Ada] Compiler crash on sliding of fixed-lower-bound object in Loop_Invariant gcc/ada/ * exp_util.adb (Expand_Sliding_Conversion): Only perform expansion when Expander_Active is True. Add a comment about this and refine existing comment regarding string literals. --- gcc/ada/exp_util.adb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index ed1a016be48..d02e587d853 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -5343,10 +5343,15 @@ package body Exp_Util is All_FLBs_Match : Boolean := True; begin - -- Sliding should never be needed for string literals, because they have - -- their bounds set according to the applicable index constraint. + -- This procedure is called during semantic analysis, and we only expand + -- a sliding conversion when Expander_Active, to avoid doing it during + -- preanalysis (which can lead to problems with the target subtype not + -- getting properly expanded during later full analysis). Also, sliding + -- should never be needed for string literals, because their bounds are + -- determined directly based on the fixed lower bound of Arr_Typ and + -- their length. - if Nkind (N) /= N_String_Literal then + if Expander_Active and then Nkind (N) /= N_String_Literal then Constraints := New_List; Act_Subt := Get_Actual_Subtype (N);