Commit a34badbd by Yannick Moy Committed by Pierre-Marie de Rodat

[Ada] Avoid spurious warning on wrong order of operator call arguments

GNAT issues a warning under -gnatwa when actuals for a call are named
like the formals, but in a different order. This is inappropriate for
calls to operators in infix form, when e.g. Right <= Left is in general
the intended order. Special case calls to operators to avoid that
spurious warning.

2019-07-11  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_res.adb (Check_Argument_Order): Special case calls to
	operators.

gcc/testsuite/

	* gnat.dg/warn21.adb, gnat.dg/warn21.ads: New testcase.

From-SVN: r273378
parent 435a6d95
2019-07-11 Yannick Moy <moy@adacore.com>
* sem_res.adb (Check_Argument_Order): Special case calls to
operators.
2019-07-10 Dmitriy Anisimkov <anisimko@adacore.com> 2019-07-10 Dmitriy Anisimkov <anisimko@adacore.com>
* libgnat/s-ststop.adb: Remove System.Strings.Stream_Ops * libgnat/s-ststop.adb: Remove System.Strings.Stream_Ops
......
...@@ -3458,12 +3458,17 @@ package body Sem_Res is ...@@ -3458,12 +3458,17 @@ package body Sem_Res is
begin begin
-- Nothing to do if no parameters, or original node is neither a -- Nothing to do if no parameters, or original node is neither a
-- function call nor a procedure call statement (happens in the -- function call nor a procedure call statement (happens in the
-- operator-transformed-to-function call case), or the call does -- operator-transformed-to-function call case), or the call is to an
-- operator symbol (which is usually in infix form), or the call does
-- not come from source, or this warning is off. -- not come from source, or this warning is off.
if not Warn_On_Parameter_Order if not Warn_On_Parameter_Order
or else No (Parameter_Associations (N)) or else No (Parameter_Associations (N))
or else Nkind (Original_Node (N)) not in N_Subprogram_Call or else Nkind (Original_Node (N)) not in N_Subprogram_Call
or else (Nkind (Name (N)) = N_Identifier
and then Present (Entity (Name (N)))
and then Nkind (Entity (Name (N)))
= N_Defining_Operator_Symbol)
or else not Comes_From_Source (N) or else not Comes_From_Source (N)
then then
return; return;
......
2019-07-11 Yannick Moy <moy@adacore.com>
* gnat.dg/warn21.adb, gnat.dg/warn21.ads: New testcase.
2019-07-11 Richard Biener <rguenther@suse.de> 2019-07-11 Richard Biener <rguenther@suse.de>
PR middle-end/91131 PR middle-end/91131
......
-- { dg-do compile }
-- { dg-options "-gnata -gnatwa" }
package body Warn21 is
procedure Foo is null;
end Warn21;
package Warn21 is
type Set is new Integer;
function "<=" (Left : Set; Right : Set) return Boolean;
function "=" (Left : Set; Right : Set) return Boolean with
Post => "="'Result = (Left <= Right and Right <= Left);
procedure Foo;
private
function "<=" (Left : Set; Right : Set) return Boolean is (True);
function "=" (Left : Set; Right : Set) return Boolean is
(Left <= Right and Right <= Left);
end Warn21;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment