]> git.ipfire.org Git - thirdparty/gcc.git/commit
ada: More aggressive inlining of subprogram calls in GNATprove mode
authorPiotr Trojanek <trojanek@adacore.com>
Wed, 6 Dec 2023 23:27:16 +0000 (00:27 +0100)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 9 Jan 2024 13:13:31 +0000 (14:13 +0100)
commit9afbf898ce89f6bcb314ddf03da20abdf0ac79cd
treeaa65a5814bee240c7a0018a152eedacc4c96f7fc
parent00a97303c2ab27263b18a008a389c3567650123b
ada: More aggressive inlining of subprogram calls in GNATprove mode

Previously if a subprogram call could not be inlined in GNATprove mode,
then all subsequent calls to the same subprogram were not inlined
either (because a failed attempt to inline clears flag Is_Inlined_Always
and we tested this flag when attempting to inline subsequent calls).

Now a failure in inlining of a particular call does not prevent inlining
of subsequent calls to the same subprogram, except when inlining failed
because the subprogram was detected to be recursive (which clears the
Is_Inlined flag that we now examine).

This change allows more checks to be proved and reduces interactions
between inlining and SPARK legality checks.

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Specification): Set Is_Inlined
flag by default in GNATprove mode.
* sem_res.adb (Resolve_Call): Only look at flag which is cleared
when inlined subprogram is detected to be recursive.
gcc/ada/sem_ch6.adb
gcc/ada/sem_res.adb