Comments
Patch
===================================================================
@@ -5503,6 +5503,18 @@
end if;
end if;
+ -- Ada 2012: mode conformance also requires that formal parameters
+ -- be both aliased, or neither.
+
+ if Ctype >= Mode_Conformant
+ and then Ada_Version >= Ada_2012
+ then
+ if Is_Aliased (Old_Formal) /= Is_Aliased (New_Formal) then
+ Conformance_Error
+ ("\aliased parameter mismatch!", New_Formal);
+ end if;
+ end if;
+
if Ctype = Fully_Conformant then
-- Names must match. Error message is more accurate if we do
In Ada 2012 formal parameters can be declared explicitly aliased. Mode conformance now requires that both or neither formal be aliased. Compiling alias.adb must yield: alias.adb:7:13: not fully conformant with declaration at line 6 alias.adb:7:13: aliased parameter mismatch alias.ads:7:24: not subtype conformant with operation inherited at line 5 alias.ads:7:24: aliased parameter mismatch --- package Alias is type R is tagged null record; procedure Change (Obj : R); type R2 is new R with null record; overriding procedure Change (Obj : aliased R2); -- ERROR end Alias; --- package body Alias is procedure Change (Obj : R) is begin null; end; procedure Change (Obj : aliased R2) is begin null; end; function check (Obj : R) return Integer; function check (Obj : aliased R) return Integer is -- ERROR begin return R'Size; end; end Alias; Tested on x86_64-pc-linux-gnu, committed on trunk 2012-06-14 Ed Schonberg <schonberg@adacore.com> * sem_ch6.adb (Check_Conformance): Add Ada 2012 check on mode conformance: "aliased" must apply to both or neither formal parameters.