From: Ed Schonberg Date: Thu, 10 Oct 2019 15:25:13 +0000 (+0000) Subject: [Ada] Spurious warning on call with out parameter in expression function X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4e866f08452aee2747a93f416ff1eb7b86d9f32e;p=gcc.git [Ada] Spurious warning on call with out parameter in expression function 2019-10-10 Ed Schonberg gcc/ada/ * sem_warn.adb (Warn_On_Useless_Assignment): Do not warn if the second assignment is at the same source position as the first. From-SVN: r276831 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9cf51728022..24c831e5b90 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,8 +1,4 @@ -2019-10-10 Gary Dismukes +2019-10-10 Ed Schonberg - * sem_util.adb (Enclosing_Subprogram): Handle the case of - E_Entry_Family, returning the entry family's associated - Protected_Body_Subprogram (as was already done for E_Entry). - * exp_ch9.adb (Expand_N_Accept_Statement): Call Reset_Scopes_To - on the block created for an accept statement to reset the scopes - of any local entities to the block scope. \ No newline at end of file + * sem_warn.adb (Warn_On_Useless_Assignment): Do not warn if the + second assignment is at the same source position as the first. \ No newline at end of file diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index f9a6062c092..04e7acfb65e 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -4546,9 +4546,15 @@ package body Sem_Warn is -- to capture the value. We are not going to capture any value, but -- the warning message depends on the same kind of conditions. + -- If the assignment appears as an out-parameter in a call within an + -- expression function it may be detected twice: once when expression + -- itself is analyzed, and once when the constructed body is analyzed. + -- We don't want to emit a spurious warning in this case. + if Is_Assignable (Ent) and then not Is_Return_Object (Ent) and then Present (Last_Assignment (Ent)) + and then Last_Assignment (Ent) /= N and then not Is_Imported (Ent) and then not Is_Exported (Ent) and then Safe_To_Capture_Value (N, Ent)