Restriction warning messages are now tagged [restriction warning]
if -gnatw.d is used, instead of [enabled by default]. This new
tag can be used in pragma Warning_As_Errors. The following is
compiled with -gnatw.d -gnatj50 -gnatl

     1. pragma Warning_As_Error ("[restriction warning]");
     2. pragma Restriction_Warnings (No_Wide_Characters);
     3. package RWarnTag is
     4.    X : Wide_Wide_Character := 'X';
               |
        >>> error: violation of restriction
            "No_Wide_Characters" at line 2
            [restriction warning]
            [warning-as-error]

     5. end;

Tested on x86_64-pc-linux-gnu, committed on trunk

2014-05-21  Robert Dewar  <de...@adacore.com>

        * errout.adb (Set_Msg_Insertion_Warning): Handle ?*? (restriction
        warning) case.
        * errout.ads: Document ?*? (restriction warning) insertion.
        * erroutc.adb (Get_Warning_Tag): Deal with ?*? (restriction
        warning) case.
        * erroutc.ads: Document use of * for restriction warning tag.
        * restrict.adb (Restriction_Msg): Tag with ?*? instead of ??.

Index: errout.adb
===================================================================
--- errout.adb  (revision 210687)
+++ errout.adb  (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -2764,7 +2764,9 @@
          elsif P + 1 <= Text'Last
            and then (Text (P) in 'a' .. 'z'
                        or else
-                     Text (P) in 'A' .. 'Z')
+                     Text (P) in 'A' .. 'Z'
+                       or else
+                     Text (P) = '*')
            and then Text (P + 1) = C
          then
             Warning_Msg_Char := Text (P);
Index: errout.ads
===================================================================
--- errout.ads  (revision 210687)
+++ errout.ads  (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -60,10 +60,12 @@
    --  Exception raised if Raise_Exception_On_Error is true
 
    Warning_Doc_Switch : Boolean renames Err_Vars.Warning_Doc_Switch;
-   --  If this is set True, then the ??/?x?/?X? sequences in error messages
-   --  are active (see errout.ads for details). If this switch is False, then
-   --  these sequences are ignored (i.e. simply equivalent to a single ?). The
-   --  -gnatw.d switch sets this flag True, -gnatw.D sets this flag False.
+   --  If this is set True, then the ??/?*?/?x?/?X? sequences in error messages
+   --  generate appropriate tags for the output error messages. If this switch
+   --  is False, then these sequences are still recognized (for the purposes
+   --  of implementing pragmas Warnings (Off,..) and Warning_As_Pragma(...) but
+   --  do not result in adding the error message tag. The -gnatw.d switch sets
+   --  this flag True, -gnatw.D sets this flag False.
 
    -----------------------------------
    -- Suppression of Error Messages --
@@ -281,7 +283,7 @@
    --      messages, and the usual style is to include it, since it makes it
    --      clear that the continuation is part of a warning message.
    --
-   --      Note: this usage is obsolete, use ??, ?x? or ?X? instead to specify
+   --      Note: this usage is obsolete, use ?? ?*? ?x? ?X? instead to specify
    --      the string to be added when Warn_Doc_Switch is set to True. If this
    --      switch is True, then for simple ? messages it has no effect. This
    --      simple form is to ease transition and will be removed later.
@@ -302,6 +304,11 @@
    --      letter corresponding to the lower case letter x in the message.
    --      For continuations, use this on each continuation message.
 
+   --    Insertion character ?*? (restriction warning)
+   --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
+   --      "[restriction warning]" at the end of the warning message. For
+   --      continuations, use this on each continuation message.
+
    --    Insertion character < (Less Than: conditional warning message)
    --      The character < appearing anywhere in a message is used for a
    --      conditional error message. If Error_Msg_Warn is True, then the
Index: restrict.adb
===================================================================
--- restrict.adb        (revision 210687)
+++ restrict.adb        (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -1047,7 +1047,7 @@
       --  Set warning message if warning
 
       if Restriction_Warnings (R) then
-         Add_Str ("??");
+         Add_Str ("?*?");
 
       --  If real violation (not warning), then mark it as non-serious unless
       --  it is a violation of No_Finalization in which case we leave it as a
Index: erroutc.adb
===================================================================
--- erroutc.adb (revision 210687)
+++ erroutc.adb (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -310,6 +310,8 @@
       if Warn and then Warn_Chr /= ' ' then
          if Warn_Chr = '?' then
             return "[enabled by default]";
+         elsif Warn_Chr = '*' then
+            return "[restriction warning]";
          elsif Warn_Chr in 'a' .. 'z' then
             return "[-gnatw" & Warn_Chr & ']';
          else pragma Assert (Warn_Chr in 'A' .. 'Z');
Index: erroutc.ads
===================================================================
--- erroutc.ads (revision 210687)
+++ erroutc.ads (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -64,10 +64,11 @@
 
    Warning_Msg_Char : Character;
    --  Warning character, valid only if Is_Warning_Msg is True
-   --    ' '      -- ? appeared on its own in message
-   --    '?'      -- ?? appeared in message
-   --    'x'      -- ?x? appeared in message
-   --    'X'      -- ?x? appeared in message (X is upper case of x)
+   --    ' '      -- ?   appeared on its own in message
+   --    '?'      -- ??  appeared in message
+   --    'x'      -- ?x? appeared in message (x = a .. z)
+   --    'X'      -- ?X? appeared in message (X = A .. Z)
+   --    '*'      -- ?*? appeared in message
 
    Is_Style_Msg : Boolean := False;
    --  Set True to indicate if the current message is a style message
@@ -201,10 +202,11 @@
 
       Warn_Chr : Character;
       --  Warning character (note: set even if Warning_Doc_Switch is False)
-      --    ' '      -- ? appeared on its own in message or no ? in message
-      --    '?'      -- ?? appeared in message
-      --    'x'      -- ?x? appeared in message
-      --    'X'      -- ?x? appeared in message (X is upper case of x)
+      --    ' '      -- ?   appeared on its own in message
+      --    '?'      -- ??  appeared in message
+      --    'x'      -- ?x? appeared in message (x = a .. z)
+      --    'X'      -- ?X? appeared in message (X = A .. Z)
+      --    '*'      -- ?*? appeared in message
 
       Style : Boolean;
       --  True if style message (starts with "(style)")

Reply via email to