aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2023-02-06 14:45:22 +0100
committerMarc Poulhiès <poulhies@adacore.com>2023-05-22 10:44:09 +0200
commitf2cffc11f85691e26f80b76065411ec0a27f2a49 (patch)
treec9f9155ad560ef853329c6a7ca5f00a5ab5d7c65
parent3754477bb08f12a7866d9f422fad85bac79f2579 (diff)
downloadgcc-f2cffc11f85691e26f80b76065411ec0a27f2a49.zip
gcc-f2cffc11f85691e26f80b76065411ec0a27f2a49.tar.gz
gcc-f2cffc11f85691e26f80b76065411ec0a27f2a49.tar.bz2
ada: Add warning on frontend inlining of Subprogram_Variant
We already warned when contracts like pre/postcondition appear together with pragma Inline_Always and they are ignored by the frontend inlining. For consistency we now also warn for Subprogram_Variant, which is similarly ignored even though this contract is only meaningful for recursive subprograms and those can't be inlined anyway (but error about this might only be emitted when full compilation is done). gcc/ada/ * sem_prag.adb (Check_Postcondition_Use_In_Inlined_Subprogram): Mention Subprogram_Variant in the comment. (Analyze_Subprogram_Variant_In_Decl_Part): Warn when contract is ignored because of pragma Inline_Always and frontend inlining.
-rw-r--r--gcc/ada/sem_prag.adb12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index dbc8584..feaf486 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -208,9 +208,10 @@ package body Sem_Prag is
(Prag : Node_Id;
Spec_Id : Entity_Id);
-- Subsidiary to the analysis of pragmas Contract_Cases, Postcondition,
- -- Precondition, Refined_Post, and Test_Case. Emit a warning when pragma
- -- Prag is associated with subprogram Spec_Id subject to Inline_Always,
- -- assertions are enabled and inling is done in the frontend.
+ -- Precondition, Refined_Post, Subprogram_Variant, and Test_Case. Emit a
+ -- warning when pragma Prag is associated with subprogram Spec_Id subject
+ -- to Inline_Always, assertions are enabled and inling is done in the
+ -- frontend.
procedure Check_State_And_Constituent_Use
(States : Elist_Id;
@@ -29627,6 +29628,11 @@ package body Sem_Prag is
End_Scope;
end if;
+ -- Currently it is not possible to inline Subprogram_Variant on a
+ -- subprogram subject to pragma Inline_Always.
+
+ Check_Postcondition_Use_In_Inlined_Subprogram (N, Spec_Id);
+
-- Otherwise the pragma is illegal
else