From: Viljar Indus <in...@adacore.com> Currently unless pretty printing is enabled we avoid parsing the message strings for continuation messages. This leads to inconsistent state for the Error_Msg_Object-s that are being created.
gcc/ada/ * erroutc.adb (Prescan_Message): Avoid not parsing all of the message attributes. * erroutc.ads: Update the documentation. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/erroutc.adb | 27 ++++++++++++++++++++++++--- gcc/ada/erroutc.ads | 3 +-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/gcc/ada/erroutc.adb b/gcc/ada/erroutc.adb index 2ce3505959f..4e0a9f26e0d 100644 --- a/gcc/ada/erroutc.adb +++ b/gcc/ada/erroutc.adb @@ -922,15 +922,36 @@ package body Erroutc is -- Start of processing for Prescan_Message begin - -- Nothing to do for continuation line, unless -gnatdF is set + -- Continuation lines need to check only for insertion sequences. + -- Other attributes should be inherited from the main message. + + if Msg (Msg'First) = '\' then + Has_Insertion_Line := False; + + J := Msg'First; + + -- If we have a quote, don't look at following character + + while J <= Msg'Last loop + if Msg (J) = ''' then + J := J + 2; + + -- Insertion line (# insertion) + + elsif Msg (J) = '#' then + Has_Insertion_Line := True; + J := J + 1; + else + J := J + 1; + end if; + end loop; - if not Debug_Flag_FF and then Msg (Msg'First) = '\' then return; -- Some global variables are not set for continuation messages, as they -- only make sense for the initial message. - elsif Msg (Msg'First) /= '\' then + else -- Set initial values of globals (may be changed during scan) diff --git a/gcc/ada/erroutc.ads b/gcc/ada/erroutc.ads index effc667bb5d..0a52af5033c 100644 --- a/gcc/ada/erroutc.ads +++ b/gcc/ada/erroutc.ads @@ -555,8 +555,7 @@ package Erroutc is -- test these values before doing the full error scan. -- -- Note that the call has no effect for continuation messages (those whose - -- first character is '\'), and all variables are left unchanged, unless - -- -gnatdF is set. + -- first character is '\') except for the Has_Insertion_Line setting. procedure Purge_Messages (From : Source_Ptr; To : Source_Ptr); -- All error messages whose location is in the range From .. To (not -- 2.45.2