[Ada] Better error message from GNATprove on illegal switch
authorYannick Moy <moy@adacore.com>
Tue, 11 Dec 2018 11:10:07 +0000 (11:10 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 11 Dec 2018 11:10:07 +0000 (11:10 +0000)
When a compilation switch is wrongly passed to GNATprove without the
leading hyphen, this patch issues a clear error message instead of the
obscure 'usage' message previously displayed.

There is no impact on compilation.

2018-12-11  Yannick Moy  <moy@adacore.com>

gcc/ada/

* gnat1drv.adb (Gnat1drv): Issue specific error message in
GNATprove mode when multiple file names on the command line.
* osint.adb, osint.ads (Dump_Command_Line_Source_File_Names):
New procedure to print file names on the command line.

From-SVN: r266989

gcc/ada/ChangeLog
gcc/ada/gnat1drv.adb
gcc/ada/osint.adb
gcc/ada/osint.ads

index ba91b12..003bea4 100644 (file)
@@ -1,3 +1,10 @@
+2018-12-11  Yannick Moy  <moy@adacore.com>
+
+       * gnat1drv.adb (Gnat1drv): Issue specific error message in
+       GNATprove mode when multiple file names on the command line.
+       * osint.adb, osint.ads (Dump_Command_Line_Source_File_Names):
+       New procedure to print file names on the command line.
+
 2018-12-11  Javier Miranda  <miranda@adacore.com>
 
        * exp_aggr.adb (Convert_To_Assignments): When gnerating C, do
index eab2fda..3c1bf36 100644 (file)
@@ -1161,8 +1161,21 @@ begin
       --  gnat1 is invoked from gcc in the normal case.
 
       if Osint.Number_Of_Files /= 1 then
-         Usage;
-         Write_Eol;
+
+         --  In GNATprove mode, gcc is not called, so we may end up with
+         --  switches wrongly interpreted as source file names when they are
+         --  written by mistake without a starting hyphen. Issue a specific
+         --  error message but do not print the internal 'usage' message.
+
+         if GNATprove_Mode then
+            Write_Str ("one of the following is not a valid switch"
+                       & " or source file name: ");
+            Osint.Dump_Command_Line_Source_File_Names;
+         else
+            Usage;
+            Write_Eol;
+         end if;
+
          Osint.Fail ("you must provide one source file");
 
       elsif Usage_Requested then
index e7644b1..58e4932 100644 (file)
@@ -787,6 +787,17 @@ package body Osint is
       end if;
    end Dir_In_Src_Search_Path;
 
+   -----------------------------------------
+   -- Dump_Command_Line_Source_File_Names --
+   -----------------------------------------
+
+   procedure Dump_Command_Line_Source_File_Names is
+   begin
+      for J in 1 .. Number_Of_Files loop
+         Write_Str (File_Names (J).all & " ");
+      end loop;
+   end Dump_Command_Line_Source_File_Names;
+
    ----------------------------
    -- Dump_Source_File_Names --
    ----------------------------
index 6c75b52..4be420e 100644 (file)
@@ -508,6 +508,9 @@ package Osint is
    --  (i.e. Include_Dir_Default_Prefix). The text is sent to whatever Output
    --  is currently using (e.g. standard output or standard error).
 
+   procedure Dump_Command_Line_Source_File_Names;
+   --  Prints out the names of all source files on the command-line
+
    -------------------------------------------
    -- Representation of Library Information --
    -------------------------------------------