From: Ed Schonberg Date: Fri, 5 Jul 2019 07:03:54 +0000 (+0000) Subject: [Ada] Compiler loop on illegal nested accept statement X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=76e716d76171e50353e7eb80632ea75165eabdc0;p=gcc.git [Ada] Compiler loop on illegal nested accept statement This patch fixes a "Compilation abandoned" message in a compiler built with assertions, or a compiler loop otherwise, when an accept statement contains an illegal accept statement for the same entry. Compiling accept_in_accept.adb must yield: accept_in_accept.adb:12:13: duplicate accept statement for same entry (RM 9.5.2 (15)) ---- procedure accept_in_accept is task a_in_a is entry a (i : Integer); end a_in_a; task body a_in_a is begin select accept a (i : Integer) do null; accept a (i : integer) do null; end a; end a; or terminate; end select; end a_in_a; begin a_in_a.a (1); end accept_in_accept; 2019-07-05 Ed Schonberg gcc/ada/ * sem_ch9.adb (Analyze_Accept_Statement): If this is an illegal accept statement for an enclosing entry abandon analysis to prevent scope mismatches and potential infinite loops in compiler. From-SVN: r273129 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 6f04f775ac6..c875ac3b2c1 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2019-07-05 Ed Schonberg + + * sem_ch9.adb (Analyze_Accept_Statement): If this is an illegal + accept statement for an enclosing entry abandon analysis to + prevent scope mismatches and potential infinite loops in + compiler. + 2019-07-05 Hristian Kirtchev * ali.adb (For_Each_Invocation_Construct, diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index a71c35c1c8d..19fff577994 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -883,7 +883,13 @@ package body Sem_Ch9 is exit when Task_Nam = Scope_Stack.Table (J).Entity; if Entry_Nam = Scope_Stack.Table (J).Entity then - Error_Msg_N ("duplicate accept statement for same entry", N); + Error_Msg_N + ("duplicate accept statement for same entry (RM 9.5.2 (15))", N); + + -- Do not continue analysis of accept statement, to prevent + -- cascaded errors. + + return; end if; end loop;