[Ada] Reset Reachable field when mutating label into loop entity
authorPiotr Trojanek <trojanek@adacore.com>
Fri, 28 Jan 2022 17:12:18 +0000 (18:12 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 11 May 2022 08:53:19 +0000 (08:53 +0000)
An entity flag Reachable now only applies to E_Label entities and needs
to be explicitly reset when mutating labels into loop entities. Only
needed to prevent cascaded errors when compiling a malicious ACATS test
with -gnatq (try semantics, even if parse errors).

Cleanup related to detection of uninitialized scalars with GOTO
statements.

gcc/ada/

* sem_ch5.adb (Analyze_Statements): Only clear Reachable flag on
proper label entities.

gcc/ada/sem_ch5.adb

index f8e6d0c..a0f2206 100644 (file)
@@ -4012,6 +4012,7 @@ package body Sem_Ch5 is
 
             if Ekind (Ent) = E_Label then
                Reinit_Field_To_Zero (Ent, F_Enclosing_Scope);
+               Reinit_Field_To_Zero (Ent, F_Reachable);
                Mutate_Ekind (Ent, E_Loop);
 
                if Nkind (Parent (Ent)) = N_Implicit_Label_Declaration then