From: Yannick Moy <m...@adacore.com> When a function is called in a predicate, it was not properly detected as not always inlined in GNATprove mode, which led to crashes later during analysis. Fixed now.
gcc/ada/ * sem_res.adb (Resolve_Call): Always call Cannot_Inline so that subprogram called is marked as not always inlined. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_res.adb | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index ac0c60f5f22..9755e4d14a6 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -7330,30 +7330,32 @@ package body Sem_Res is or else Is_Invariant_Procedure (Current_Subprogram) or else Is_DIC_Procedure (Current_Subprogram)) then - if Present (Body_Id) - and then Present (Body_To_Inline (Nam_Decl)) - then + declare + Issue_Msg : constant Boolean := + Present (Body_Id) + and then Present (Body_To_Inline (Nam_Decl)); + begin if Is_Predicate_Function (Current_Subprogram) then Cannot_Inline ("cannot inline & (inside predicate)?", - N, Nam_UA); + N, Nam_UA, Suppress_Info => not Issue_Msg); elsif Is_Invariant_Procedure (Current_Subprogram) then Cannot_Inline ("cannot inline & (inside invariant)?", - N, Nam_UA); + N, Nam_UA, Suppress_Info => not Issue_Msg); elsif Is_DIC_Procedure (Current_Subprogram) then Cannot_Inline ("cannot inline & (inside Default_Initial_Condition)?", - N, Nam_UA); + N, Nam_UA, Suppress_Info => not Issue_Msg); else Cannot_Inline ("cannot inline & (inside expression function)?", - N, Nam_UA); + N, Nam_UA, Suppress_Info => not Issue_Msg); end if; - end if; + end; -- Cannot inline a call inside the definition of a record type, -- typically inside the constraints of the type. Calls in -- 2.40.0