diff options
author | Gary Dismukes <dismukes@adacore.com> | 2021-03-25 13:37:58 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-06-21 06:45:01 -0400 |
commit | eb077d7047629d5704338270ca57b64272627268 (patch) | |
tree | 82bc2b18a7a5991293af24e2207a18313321dc94 /gcc | |
parent | c9fcf011726d2578acfcf58eae05646fce6dae94 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/exp_util.adb | 13 |
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); |