aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/contracts.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-05-06 22:48:04 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2022-06-01 08:43:18 +0000
commit66f2a0def548b7f2e4edb46e50fc0b72e84532cc (patch)
treecdcbff912d4a2ea1aa191c6566c83309daf63629 /gcc/ada/contracts.adb
parent2ae98c3a75102cb4dbb9b8da690952a9971d4e93 (diff)
downloadgcc-66f2a0def548b7f2e4edb46e50fc0b72e84532cc.zip
gcc-66f2a0def548b7f2e4edb46e50fc0b72e84532cc.tar.gz
gcc-66f2a0def548b7f2e4edb46e50fc0b72e84532cc.tar.bz2
[Ada] Fix bad interaction between Inline_Always and -gnateV + -gnata
The combination of pragma/aspect Inline_Always and -gnateV -gnata runs afoul of the handling of inlining across units by gigi, which does not inline a subprogram that calls nested subprograms if these subprograms are not themselves inlined. This condition does not apply to internally generated subprograms but the special _postconditions procedure has Debug_Info_Needed set so it is not considered as such and, as a consequence, triggers an error if the enclosing subprogram requires inlining by means of Inline_Always. The _postconditions procedure is already marked inlined when generating C code so it makes sense to mark it inlined in the general case as well. gcc/ada/ * contracts.adb (Build_Postconditions_Procedure): Set Is_Inlined unconditionnally on the procedure entity.
Diffstat (limited to 'gcc/ada/contracts.adb')
-rw-r--r--gcc/ada/contracts.adb5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb
index 9463642..ed97d16 100644
--- a/gcc/ada/contracts.adb
+++ b/gcc/ada/contracts.adb
@@ -2365,6 +2365,10 @@ package body Contracts is
Set_Debug_Info_Needed (Proc_Id);
Set_Postconditions_Proc (Subp_Id, Proc_Id);
+ -- Mark it inlined to speed up the call
+
+ Set_Is_Inlined (Proc_Id);
+
-- Force the front-end inlining of _Postconditions when generating C
-- code, since its body may have references to itypes defined in the
-- enclosing subprogram, which would cause problems for unnesting
@@ -2373,7 +2377,6 @@ package body Contracts is
if Modify_Tree_For_C then
Set_Has_Pragma_Inline (Proc_Id);
Set_Has_Pragma_Inline_Always (Proc_Id);
- Set_Is_Inlined (Proc_Id);
end if;
-- The related subprogram is a function: create the specification of