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-Tag: upstream/12.2.0~21259 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e866f08452aee2747a93f416ff1eb7b86d9f32e;p=platform%2Fupstream%2Fgcc.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 9cf5172..24c831e 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 f9a6062..04e7acf 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)