From: Javier Miranda <mira...@adacore.com> gcc/ada/
* sem_ch6.adb (Check_Private_Overriding): Improve code detecting error on private function with controlling result. Fixes the regression of ACATS bde0003. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_ch6.adb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 008c3a7ba13..461bdfcbe4b 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -11535,8 +11535,16 @@ package body Sem_Ch6 is -- operation. That's illegal in the tagged case -- (but not if the private type is untagged). + -- Do not report this error when the tagged type has + -- the First_Controlling_Parameter aspect, unless the + -- function has a controlling result (which is only + -- possible if the function overrides an inherited + -- primitive). + if T = Base_Type (Etype (S)) - and then Has_Controlling_Result (S) + and then + (not Has_First_Controlling_Parameter_Aspect (T) + or else Has_Controlling_Result (S)) then Error_Msg_N ("private function with controlling result must" @@ -11550,7 +11558,9 @@ package body Sem_Ch6 is elsif Ekind (Etype (S)) = E_Anonymous_Access_Type and then T = Base_Type (Designated_Type (Etype (S))) - and then Has_Controlling_Result (S) + and then + (not Has_First_Controlling_Parameter_Aspect (T) + or else Has_Controlling_Result (S)) and then Ada_Version >= Ada_2012 then Error_Msg_N -- 2.45.2