Patchwork [Ada] Don't flag No_Obsolescent_Features violations in instances

login
register
mail settings
Submitter Arnaud Charlet
Date Feb. 17, 2012, 2:16 p.m.
Message ID <20120217141614.GA28501@adacore.com>
Download mbox | patch
Permalink /patch/141827/
State New
Headers show

Comments

Arnaud Charlet - Feb. 17, 2012, 2:16 p.m.
This patch avoids flagging violations of the No_Obsolescent_Features
restriction in generic instances. Such diagnostics are redundant
since the violation will be flagged in the template anyway.

The following is a test of this patch

gnat.adc contains pragma Restrictions (No_Obsolescent_Features);

     1. generic
     2. package obsolescent_generic is
     3.    procedure Initialize;
     4. end obsolescent_generic;

     1. package body obsolescent_generic is
     2.    procedure Initialize is
     3.       A  : Integer;
     4.       B  : Integer;
     5.       for A use at B'address;
              |
        >>> violation of restriction
            "no_obsolescent_features" at gnat.adc:1

     6.    begin
     7.       null;
     8.    end Initialize;
     9. end obsolescent_generic;

Compiling: obsolescent_instance1.ads

     1. package obsolescent_instance1 is
     2.    procedure Call;
     3. end obsolescent_instance1;

Compiling: obsolescent_instance1.adb

     1. with obsolescent_generic;
     2. package body obsolescent_instance1 is
     3.    package Instance1 is new obsolescent_generic;
     4.    procedure Call is
     5.    begin
     6.       Instance1.Initialize;
     7.    end Call;
     8. end obsolescent_instance1;

Prior to this patch, the compilation of the instance
resulted in a diagnostic on line 3 of the body (the
instantiation).

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

2012-02-17  Robert Dewar  <dewar@adacore.com>

	* restrict.adb (Check_Restriction): Add special handling for
	No_Obsolescent_Features.

Patch

Index: restrict.adb
===================================================================
--- restrict.adb	(revision 184330)
+++ restrict.adb	(working copy)
@@ -6,7 +6,7 @@ 
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, 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- --
@@ -532,6 +532,15 @@ 
       elsif not Restrictions.Set (R) then
          null;
 
+      --  Don't complain about No_Obsolescent_Features in an instance, since we
+      --  will complain on the template, which is much better. Are there other
+      --  cases like this ??? Do we need a more general mechanism ???
+
+      elsif R = No_Obsolescent_Features
+        and then Instantiation_Location (Sloc (N)) /= No_Location
+      then
+         null;
+
       --  Here if restriction set, check for violation (either this is a
       --  Boolean restriction, or a parameter restriction with a value of
       --  zero and an unknown count, or a parameter restriction with a