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