diff mbox series

[COMMITTED,08/17] ada: Parse the attributes of continuation messages correctly

Message ID 20240829130750.1651060-8-poulhies@adacore.com
State New
Headers show
Series [COMMITTED,01/17] ada: Update documentation for conditional when constructs | expand

Commit Message

Marc Poulhiès Aug. 29, 2024, 1:07 p.m. UTC
From: Viljar Indus <indus@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 mbox series

Patch

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