AI95-0303 removes the rule that protected objects with handlers must be declared at the library level. The AI is a binding interpretation, and thus applies to earlier versions of the language as well. The new rule is tested in ACATS test BXC3002.
Tested on x86_64-pc-linux-gnu, committed on trunk 2012-08-06 Ed Schonberg <schonb...@adacore.com> * sem_ch3.adb (Analyze_Object_Declaration): According to AI95-0303, protected objects with interrupt handlers can be declared in nested scopes. This is a binding interpretation, and thus applies to all versions of the compiler.
Index: sem_ch3.adb =================================================================== --- sem_ch3.adb (revision 190155) +++ sem_ch3.adb (working copy) @@ -3078,8 +3078,11 @@ -- in the RM is removed) because accessibility checks are sufficient -- to make handlers not at the library level illegal. + -- AI05-0303: the AI is in fact a binding interpretation, and thus + -- applies to the '95 version of the language as well. + if Has_Interrupt_Handler (T) - and then Ada_Version < Ada_2005 + and then Ada_Version < Ada_95 then Error_Msg_N ("interrupt object can only be declared at library level", Id);