===================================================================
@@ -1339,14 +1339,16 @@
Cur := First_Error_Msg;
while Cur /= No_Error_Msg loop
declare
- CE : Error_Msg_Object renames Errors.Table (Cur);
+ CE : Error_Msg_Object renames Errors.Table (Cur);
+ Tag : constant String := Get_Warning_Tag (Cur);
begin
if (CE.Warn and not CE.Deleted)
- and then (Warning_Specifically_Suppressed (CE.Sptr, CE.Text) /=
+ and then
+ (Warning_Specifically_Suppressed (CE.Sptr, CE.Text, Tag) /=
No_String
- or else
- Warning_Specifically_Suppressed (CE.Optr, CE.Text) /=
+ or else
+ Warning_Specifically_Suppressed (CE.Optr, CE.Text, Tag) /=
No_String)
then
Delete_Warning (Cur);
===================================================================
@@ -1457,7 +1457,8 @@
function Warning_Specifically_Suppressed
(Loc : Source_Ptr;
- Msg : String_Ptr) return String_Id
+ Msg : String_Ptr;
+ Tag : String) return String_Id
is
begin
-- Loop through specific warning suppression entries
@@ -1473,7 +1474,9 @@
if SWE.Config
or else (SWE.Start <= Loc and then Loc <= SWE.Stop)
then
- if Matches (Msg.all, SWE.Msg.all) then
+ if Matches (Msg.all, SWE.Msg.all)
+ or else Matches (Tag, SWE.Msg.all)
+ then
SWE.Used := True;
return SWE.Reason;
end if;
===================================================================
@@ -556,12 +556,14 @@
function Warning_Specifically_Suppressed
(Loc : Source_Ptr;
- Msg : String_Ptr) return String_Id;
+ Msg : String_Ptr;
+ Tag : String) return String_Id;
-- Determines if given message to be posted at given location is suppressed
-- by specific ON/OFF Warnings pragmas specifying this particular message.
-- If the warning is not suppressed then No_String is returned, otherwise
-- the corresponding warning string is returned (or the null string if no
- -- Warning argument was present in the pragma).
+ -- Warning argument was present in the pragma). Tag is the error message
+ -- tag for the message in question.
function Warning_Treated_As_Error (Msg : String) return Boolean;
-- Returns True if the warning message Msg matches any of the strings
This patch allows the use of a warning tag as the second parameter of a pragma Warnings (Off\On, ...) pragma. The effect is to control all error messages in that category. This tag may be either [-gnatw?] for a particular category of errors, or [restriction warning] to cover all restriction warnings, or [enabled by default] to deal with all other warnings that are set by default. The following test is compiled with -gnatj55 -gnatl 1. pragma Restriction_Warnings (No_Wide_Characters); 2. package RWarnTag2 is 3. pragma Warnings (Off, "[restriction warning]"); 4. Y : Wide_Wide_Character := 'Y'; 5. pragma Warnings (On, "[restriction warning]"); 6. X : Wide_Wide_Character := 'X'; | >>> warning: violation of restriction "No_Wide_Characters" at line 1 7. end; Tested on x86_64-pc-linux-gnu, committed on trunk 2014-05-21 Robert Dewar <dewar@adacore.com> * errout.adb, erroutc.adb, erroutc.ads: Allow warning tag in pragma Warnings (Off, string).