From: Bob Duff <[email protected]>

This patch fixes a bug where GNAT gives a warning
about redundant parentheses on expressions like "(X in S) = B".
In fact, the parentheses are required in this case.

The bug is caused by constant-folding the expression into
an expression that does not require parentheses, but in
a way that retains the parentheses. The fix is to look
at Original_Node.

gcc/ada/ChangeLog:

        * style.adb (Check_Xtra_Parens_Precedence):
        Give warning based on Original_Node.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/style.adb | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/gcc/ada/style.adb b/gcc/ada/style.adb
index 6e5688de706..56d1060bd79 100644
--- a/gcc/ada/style.adb
+++ b/gcc/ada/style.adb
@@ -345,12 +345,14 @@ package body Style is
    begin
       if Style_Check_Xtra_Parens_Precedence
         and then
-          Paren_Count (N) >
-            (if Nkind (N) in N_Case_Expression
-                           | N_Expression_With_Actions
-                           | N_If_Expression
-                           | N_Quantified_Expression
-                           | N_Raise_Expression
+          Paren_Count (Original_Node (N)) >
+            (if Nkind (Original_Node (N)) in N_Case_Expression
+                                           | N_Expression_With_Actions
+                                           | N_If_Expression
+                                           | N_Quantified_Expression
+                                           | N_Raise_Expression
+                                           | N_In
+                                           | N_Not_In
              then 1
              else 0)
       then
-- 
2.51.0

Reply via email to