[Ada] Alternative display of multi-line messages for GNATprove
authorYannick Moy <moy@adacore.com>
Thu, 9 Jul 2020 09:52:49 +0000 (11:52 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 19 Oct 2020 09:53:40 +0000 (05:53 -0400)
gcc/ada/

* debug.adb: Use debug switch -gnatdF for this alternative
display of messages.
* errout.adb (Output_Messages): Alternative display when -gnatdF
is used.
* erroutc.adb (Output_Msg_Text): Likewise.

gcc/ada/debug.adb
gcc/ada/errout.adb
gcc/ada/erroutc.adb

index 4eb3d5b5c1676d016d4dd05adf3066907d640bac..f00f7471de1327b2d86403e4b9f7cd9934c97a0f 100644 (file)
@@ -69,7 +69,7 @@ package body Debug is
    --  dC   Output debugging information on check suppression
    --  dD   Delete elaboration checks in inner level routines
    --  dE   Apply elaboration checks to predefined units
-   --  dF
+   --  dF   Alternative display for messages over multiple lines
    --  dG   Generate all warnings including those normally suppressed
    --  dH   Hold (kill) call to gigi
    --  dI   Inhibit internal name numbering in gnatG listing
index 1063d7d0548498f8f96a354a5819189966a05c47..36e8f6a9c324b75494fa85f90bcabdb5c0523c58 100644 (file)
@@ -2052,24 +2052,41 @@ package body Errout is
          E := First_Error_Msg;
          while E /= No_Error_Msg loop
             if not Errors.Table (E).Deleted and then not Debug_Flag_KK then
-               if Full_Path_Name_For_Brief_Errors then
-                  Write_Name (Full_Ref_Name (Errors.Table (E).Sfile));
-               else
-                  Write_Name (Reference_Name (Errors.Table (E).Sfile));
+
+               --  If -gnatdF is used, separate main messages from previous
+               --  messages with a newline and make continuation messages
+               --  follow the main message with only an indentation of two
+               --  space characters, without repeating file:line:col: prefix.
+
+               if Debug_Flag_FF then
+                  if Errors.Table (E).Msg_Cont then
+                     Write_Str ("  ");
+                  else
+                     Write_Eol;
+                  end if;
                end if;
 
-               Write_Char (':');
-               Write_Int (Int (Physical_To_Logical
-                                (Errors.Table (E).Line,
-                                 Errors.Table (E).Sfile)));
-               Write_Char (':');
+               if not (Debug_Flag_FF and then Errors.Table (E).Msg_Cont) then
+                  if Full_Path_Name_For_Brief_Errors then
+                     Write_Name (Full_Ref_Name (Errors.Table (E).Sfile));
+                  else
+                     Write_Name (Reference_Name (Errors.Table (E).Sfile));
+                  end if;
+
+                  Write_Char (':');
+                  Write_Int (Int (Physical_To_Logical
+                             (Errors.Table (E).Line,
+                                Errors.Table (E).Sfile)));
+                  Write_Char (':');
+
+                  if Errors.Table (E).Col < 10 then
+                     Write_Char ('0');
+                  end if;
 
-               if Errors.Table (E).Col < 10 then
-                  Write_Char ('0');
+                  Write_Int (Int (Errors.Table (E).Col));
+                  Write_Str (": ");
                end if;
 
-               Write_Int (Int (Errors.Table (E).Col));
-               Write_Str (": ");
                Output_Msg_Text (E);
                Write_Eol;
             end if;
index 0c5d98ce14660ce38051ae5d546c74eb9ba6c76c..df174f6abe65978d8f2c21363360bac6f2607708 100644 (file)
@@ -689,9 +689,16 @@ package body Erroutc is
          Txt := Text;
       end if;
 
+      --  If -gnatdF is used, continuation messages follow the main message
+      --  with only an indentation of two space characters, without repeating
+      --  any prefix.
+
+      if Debug_Flag_FF and then E_Msg.Msg_Cont then
+         null;
+
       --  For info messages, prefix message with "info: "
 
-      if E_Msg.Info then
+      elsif E_Msg.Info then
          Txt := new String'("info: " & Txt.all);
 
       --  Warning treated as error