[Ada] Aspect specifications on subprogram renaming declarations

Submitted by Arnaud Charlet on Nov. 23, 2011, 1:52 p.m.


Message ID 20111123135226.GA6915@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet Nov. 23, 2011, 1:52 p.m.
The syntax of Ada 2012 accepts aspect specifications on renaming declarations,
but no language-defined aspects exist for them, so that pre- and postconditions
on these declarations must be rejected.

Compiling db.ads in Ada 2012 mode must yield:

    db.ads:9:07: incorrect placement of aspect "PRE"
    db.ads:10:07: incorrect placement of aspect "POST"
    db.ads:11:06: incorrect placement of aspect "TEST_CASE"

package DB is
   type Account is tagged record
      X : Integer;
   end record;

   procedure Open (It : out Account; V : Integer);
   procedure Op (It : out Account; V : Integer) renames Open
      Pre      => (V > 0),
      Post     => (It.X = V),
     Test_Case => (Name     => "existing account",
                   Mode     => Nominal,
                   Ensures  =>  T.X > 0);
end DB;

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

2011-11-23  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch8.adb (Analyze_Subprogram_Renaming_Declaration):
	If the declaration has aspects, analyze them so they can be
	properly rejected.

Patch hide | download patch | download mbox

Index: sem_ch8.adb
--- sem_ch8.adb	(revision 181662)
+++ sem_ch8.adb	(working copy)
@@ -52,6 +52,7 @@ 
 with Sem_Ch4;  use Sem_Ch4;
 with Sem_Ch6;  use Sem_Ch6;
 with Sem_Ch12; use Sem_Ch12;
+with Sem_Ch13; use Sem_Ch13;
 with Sem_Disp; use Sem_Disp;
 with Sem_Dist; use Sem_Dist;
 with Sem_Eval; use Sem_Eval;
@@ -2848,6 +2849,13 @@ 
           ("?redundant renaming, entity is directly visible", Name (N));
       end if;
+      --  Implementation-defined aspect specifications can appear in a renaming
+      --  declaration, but not language-defined ones.
+      if Has_Aspects (N) then
+         Analyze_Aspect_Specifications (N, New_S);
+      end if;
       Ada_Version := Save_AV;
       Ada_Version_Explicit := Save_AV_Exp;
    end Analyze_Subprogram_Renaming;