diff options
author | Yannick Moy <moy@adacore.com> | 2023-07-28 09:17:41 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-08-07 13:14:36 +0200 |
commit | 43057533fe24b3bbcc08f7e094af6fcaf58f279e (patch) | |
tree | 22123f3a519e4423f208162af47c2db91e8a9a94 /gcc | |
parent | 3ad67df218bf6073f4c783df54cdf0e20fa5e42a (diff) | |
download | gcc-43057533fe24b3bbcc08f7e094af6fcaf58f279e.zip gcc-43057533fe24b3bbcc08f7e094af6fcaf58f279e.tar.gz gcc-43057533fe24b3bbcc08f7e094af6fcaf58f279e.tar.bz2 |
ada: Crash in GNATprove due to wrong detection of inlining
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_res.adb | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index ac0c60f..9755e4d 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 |