From: Ed Schonberg Date: Wed, 20 Jan 2021 21:15:30 +0000 (-0500) Subject: [Ada] Missing semantic error on ineffective Others_Clause X-Git-Tag: basepoints/gcc-13~7767 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e84d25c9955dfe71b401f85291a56fa7f6375b0c;p=thirdparty%2Fgcc.git [Ada] Missing semantic error on ineffective Others_Clause gcc/ada/ * exp_aggr.adb (Expand_Array_Aggregate): If the expression in an Others_Clause has not been analyzed because previous analysis of the enclosing aggregate showed the clause to be ineffective i.e. cover a null range, analyze it now to detect a possible type illegality. --- diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 3a37f380d016..f8168fe77589 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -5958,6 +5958,21 @@ package body Exp_Aggr is if Nkind (First (Choice_List (Assoc))) = N_Others_Choice then Others_Present (Dim) := True; + + -- An others_clause may be superfluous if previous components + -- cover the full given range of a constrained array. In such + -- a case an others_clause does not contribute any additional + -- components and has not been analyzed. We analyze it now to + -- detect type errors in the expression, even though no code + -- will be generated for it. + + if Dim = Aggr_Dimension + and then Nkind (Assoc) /= N_Iterated_Component_Association + and then not Analyzed (Expression (Assoc)) + and then not Box_Present (Assoc) + then + Preanalyze_And_Resolve (Expression (Assoc), Ctyp); + end if; end if; end if;