From 5fae483372b3e4da5b5e00b0ccf9557335e9e421 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Mon, 18 May 2020 21:41:12 +0200 Subject: [PATCH] [Ada] Remove excessive validity checks on in-parameters gcc/ada/ * sem_util.ads, sem_util.adb (Safe_To_Capture_Value): Return True for in-parameters. --- gcc/ada/sem_util.adb | 18 ++++++++++-------- gcc/ada/sem_util.ads | 15 ++++++++------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 7751be7b9db..96563cbee3a 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -25718,23 +25718,25 @@ package body Sem_Util is is begin -- The only entities for which we track constant values are variables - -- which are not renamings, constants, out parameters, and in out - -- parameters, so check if we have this case. + -- which are not renamings, constants and formal parameters, so check + -- if we have this case. -- Note: it may seem odd to track constant values for constants, but in -- fact this routine is used for other purposes than simply capturing - -- the value. In particular, the setting of Known[_Non]_Null. + -- the value. In particular, the setting of Known[_Non]_Null and + -- Is_Known_Valid. if (Ekind (Ent) = E_Variable and then No (Renamed_Object (Ent))) - or else - Ekind_In (Ent, E_Constant, E_Out_Parameter, E_In_Out_Parameter) + or else + Ekind (Ent) = E_Constant + or else + Is_Formal (Ent) then null; - -- For conditionals, we also allow loop parameters and all formals, - -- including in parameters. + -- For conditionals, we also allow loop parameters - elsif Cond and then Ekind_In (Ent, E_Loop_Parameter, E_In_Parameter) then + elsif Cond and then Ekind (Ent) = E_Loop_Parameter then null; -- For all other cases, not just unsafe, but impossible to capture diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 817af3baa61..2c6259b0e25 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -2743,13 +2743,14 @@ package Sem_Util is (N : Node_Id; Ent : Entity_Id; Cond : Boolean := False) return Boolean; - -- The caller is interested in capturing a value (either the current value, - -- or an indication that the value is non-null) for the given entity Ent. - -- This value can only be captured if sequential execution semantics can be - -- properly guaranteed so that a subsequent reference will indeed be sure - -- that this current value indication is correct. The node N is the - -- construct which resulted in the possible capture of the value (this - -- is used to check if we are in a conditional). + -- The caller is interested in capturing a value (either the current + -- value, an indication that the value is [non-]null or an indication that + -- the value is valid) for the given entity Ent. This value can only be + -- captured if sequential execution semantics can be properly guaranteed so + -- that a subsequent reference will indeed be sure that this current value + -- indication is correct. The node N is the construct which resulted in + -- the possible capture of the value (this is used to check if we are in + -- a conditional). -- -- Cond is used to skip the test for being inside a conditional. It is used -- in the case of capturing values from if/while tests, which already do a -- 2.30.2