aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2021-03-25 13:37:58 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2021-06-21 06:45:01 -0400
commiteb077d7047629d5704338270ca57b64272627268 (patch)
tree82bc2b18a7a5991293af24e2207a18313321dc94
parentc9fcf011726d2578acfcf58eae05646fce6dae94 (diff)
downloadgcc-eb077d7047629d5704338270ca57b64272627268.zip
gcc-eb077d7047629d5704338270ca57b64272627268.tar.gz
gcc-eb077d7047629d5704338270ca57b64272627268.tar.bz2
[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.
-rw-r--r--gcc/ada/exp_util.adb13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index ed1a016..d02e587 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.
-
- if Nkind (N) /= N_String_Literal then
+ -- 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 Expander_Active and then Nkind (N) /= N_String_Literal then
Constraints := New_List;
Act_Subt := Get_Actual_Subtype (N);