From: Ghjuvan Lacambre <lacam...@adacore.com> The previous version of this code stopped printing messages as soon as it encountered a deleted or continuation message. This was wrong, continuation and deleted messages can be followed by live messages that do need to be printed.
gcc/ada/ * errout.adb (Output_Messages): Fix loop termination condition. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/errout.adb | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index 1c6222b3a29..6e378a60731 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -3062,16 +3062,19 @@ package body Errout is E := Errors.Table (E).Next; - -- Skip deleted messages. - -- Also skip continuation messages, as they have already been - -- printed along the message they're attached to. + while E /= No_Error_Msg loop + + -- Skip deleted messages. + -- Also skip continuation messages, as they have already been + -- printed along the message they're attached to. + + if not Errors.Table (E).Deleted + and then not Errors.Table (E).Msg_Cont + then + Write_Char (','); + Output_JSON_Message (E); + end if; - while E /= No_Error_Msg - and then not Errors.Table (E).Deleted - and then not Errors.Table (E).Msg_Cont - loop - Write_Char (','); - Output_JSON_Message (E); E := Errors.Table (E).Next; end loop; end if; -- 2.40.0