aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_res.adb
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2023-05-03 09:23:29 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-06-13 09:31:45 +0200
commit8c748260776d672949ce02c9aa93292e0d6bc206 (patch)
tree749aae246467aabac222a10a3755b319b21570c4 /gcc/ada/sem_res.adb
parentdcc601423c21a3902d6dd22d40a9a828ce9658b0 (diff)
downloadgcc-8c748260776d672949ce02c9aa93292e0d6bc206.zip
gcc-8c748260776d672949ce02c9aa93292e0d6bc206.tar.gz
gcc-8c748260776d672949ce02c9aa93292e0d6bc206.tar.bz2
ada: Disable inlining in potentially unevaluated contexts
Instead of explicitly disabling inlining in quantified expressions, (which happen to be only preanalysed) and then disabling inlining in potentially unevaluated contexts that are fully analysed (which happen to include quantified expressions), we now simply disable inlining in all potentially unevaluated contexts, regardless of the full analysis mode. This also disables inlining in iterated component associations, which can be both preanalysed or fully analysed depending on their expression, but nevertheless are potentially unevaluated. gcc/ada/ * sem_res.adb (Resolve_Call): Replace early call to In_Quantified_Expression with a call to Is_Potentially_Unevaluated that was only done when Full_Analysis is true.
Diffstat (limited to 'gcc/ada/sem_res.adb')
-rw-r--r--gcc/ada/sem_res.adb21
1 files changed, 6 insertions, 15 deletions
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index c2a4bcb..41787f3 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -7290,14 +7290,14 @@ package body Sem_Res is
Cannot_Inline
("cannot inline & (in default expression)?", N, Nam_UA);
- -- Calls cannot be inlined inside quantified expressions, which
- -- are left in expression form for GNATprove. Since these
- -- expressions are only preanalyzed, we need to detect the failure
- -- to inline outside of the case for Full_Analysis below.
+ -- Calls cannot be inlined inside potentially unevaluated
+ -- expressions, as this would create complex actions inside
+ -- expressions, that are not handled by GNATprove.
- elsif In_Quantified_Expression (N) then
+ elsif Is_Potentially_Unevaluated (N) then
Cannot_Inline
- ("cannot inline & (in quantified expression)?", N, Nam_UA);
+ ("cannot inline & (in potentially unevaluated context)?",
+ N, Nam_UA);
-- Inlining should not be performed during preanalysis
@@ -7365,15 +7365,6 @@ package body Sem_Res is
elsif No (Body_To_Inline (Nam_Decl)) then
null;
- -- Calls cannot be inlined inside potentially unevaluated
- -- expressions, as this would create complex actions inside
- -- expressions, that are not handled by GNATprove.
-
- elsif Is_Potentially_Unevaluated (N) then
- Cannot_Inline
- ("cannot inline & (in potentially unevaluated context)?",
- N, Nam_UA);
-
-- Calls cannot be inlined inside the conditions of while
-- loops, as this would create complex actions inside
-- the condition, that are not handled by GNATprove.