From 230fef15abbbd37ae2ee339839f7b478d1ce2ab3 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Mon, 17 Apr 2023 12:14:28 +0200 Subject: [PATCH] ada: Remove explicit decoration of wrapper created in freezing We create wrapper functions associated with inherited functions with controlling results which are not overridden during freezing. We partly decorated them explicitly, even though they would be fully decorated later anyway. This early decoration didn't work as expected, because flag In_Private_Part that is read by Override_Dispatching_Operation it not set reliably while freezing (as explained in the comment of Is_Private_Declaration). In effect, we were getting a circularity between Alias and Overridden_Operation, which was causing GNATprove to loop infinitely. Apparently the cleanest fix is to not decorate the wrapper with an early call to Override_Dispatching_Operation. gcc/ada/ * exp_ch3.adb (Make_Controlling_Function_Wrappers): Remove early decoration. --- gcc/ada/exp_ch3.adb | 2 -- 1 file changed, 2 deletions(-) diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index f8c99470dd75..91dcfa0f643a 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -11140,8 +11140,6 @@ package body Exp_Ch3 is -- is a wrapper's body in order to get check suppression right. Set_Corresponding_Spec (Func_Body, Func_Id); - - Override_Dispatching_Operation (Tag_Typ, Subp, New_Op => Func_Id); end if; <> -- 2.47.2