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 with 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 <schonb...@adacore.com> * sem_ch8.adb (Analyze_Subprogram_Renaming_Declaration): If the declaration has aspects, analyze them so they can be properly rejected.
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;