The compiler complains when a limited private type has a full type that is a protected type extending an interface, thinking that the partial view is not limited. The compiler was incorrectly checking that the partial view satisfies Is_Limited_Composite rather than simply testing for limitedness.
The following test must compile quietly with -gnat05: package Priv_Prot_Extension_Bug is type Protected_Interface is protected interface; type Priv is limited private; private protected type Priv is new Protected_Interface with end Priv; end Priv_Prot_Extension_Bug; package body Priv_Prot_Extension_Bug is protected body Priv is end Priv; end Priv_Prot_Extension_Bug; Tested on x86_64-pc-linux-gnu, committed on trunk 2011-09-06 Gary Dismukes <dismu...@adacore.com> * sem_ch9.adb (Check_Interfaces): Test Is_Limited_Type rather than Is_Limited_Record when checking that the partial view of a synchronized full view must be limited.
Index: sem_ch9.adb =================================================================== --- sem_ch9.adb (revision 178565) +++ sem_ch9.adb (working copy) @@ -2381,7 +2381,7 @@ -- declaration must be limited. if Present (Interface_List (N)) - and then not Is_Limited_Record (Priv_T) + and then not Is_Limited_Type (Priv_T) then Error_Msg_Sloc := Sloc (Priv_T); Error_Msg_N ("(Ada 2005) limited type declaration expected for " &