summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2025-11-11 21:12:54 +0100
committerMarc Poulhiès <dkm@gcc.gnu.org>2025-11-21 09:29:37 +0100
commit35f7214070c05198baf266c12606d947b7c2280c (patch)
tree54f3af586b664fbb72afb41a1969acae4bcb8a18
parentf656344f5fad97f67bd12797a37bb5922021fd5c (diff)
ada: Fix warnings given by static analyzer on Exp_Ch4
gcc/ada/ChangeLog: * exp_ch4.adb (Expand_N_Op_Eq): Use No instead of not Present. (Optimize_Length_Comparison): Initialize Is_Zero and Comp variables. (Safe_In_Place_Array_Op): Do not use local variable to pass data to nested function Is_Safe_Operand.
-rw-r--r--gcc/ada/exp_ch4.adb23
1 files changed, 11 insertions, 12 deletions
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 2b52fc70175..7c90aa0d1b8 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -8522,7 +8522,7 @@ package body Exp_Ch4 is
-- Program_Error of objects of the outer type are compared using
-- predefined equality.
- if not Present (Get_User_Defined_Equality (Typl)) then
+ if No (Get_User_Defined_Equality (Typl)) then
Warn_On_Abstract_Equality_For_Component
(Component_Type (Typl), Comp => Empty);
end if;
@@ -8612,7 +8612,7 @@ package body Exp_Ch4 is
-- during analysis and resolution, and do not reach this code (but in
-- many cases tagged equality comparisons do reach the code below).
- if not Present (Get_User_Defined_Equality (Typl)) then
+ if No (Get_User_Defined_Equality (Typl)) then
declare
Comp : Entity_Id := First_Component (Typl);
begin
@@ -14358,7 +14358,7 @@ package body Exp_Ch4 is
-- First and Last attribute reference nodes, which end up as left and
-- right operands of the optimized result.
- Is_Zero : Boolean;
+ Is_Zero : Boolean := False; -- prevent junk warning
-- True for comparison operand of zero
Maybe_Superflat : Boolean;
@@ -14369,7 +14369,7 @@ package body Exp_Ch4 is
-- is itself the length of an array with the same bounds as the array on
-- the LHS, we can entirely optimize away the comparison.
- Comp : Node_Id;
+ Comp : Node_Id := Empty; -- prevent junk warning
-- Comparison operand, set only if Is_Zero is false
Ent : array (Pos range 1 .. 2) of Entity_Id := (Empty, Empty);
@@ -15076,9 +15076,7 @@ package body Exp_Ch4 is
Op1 : Node_Id;
Op2 : Node_Id) return Boolean
is
- Target : Entity_Id;
-
- function Is_Safe_Operand (Op : Node_Id) return Boolean;
+ function Is_Safe_Operand (Op : Node_Id; Tgt : Entity_Id) return Boolean;
-- Operand is safe if it cannot overlap part of the target of the
-- operation. If the operand and the target are identical, the operand
-- is safe. The operand can be empty in the case of negation.
@@ -15102,7 +15100,8 @@ package body Exp_Ch4 is
-- Is_Safe_Operand --
---------------------
- function Is_Safe_Operand (Op : Node_Id) return Boolean is
+ function Is_Safe_Operand (Op : Node_Id; Tgt : Entity_Id) return Boolean
+ is
begin
if No (Op) then
return True;
@@ -15116,10 +15115,10 @@ package body Exp_Ch4 is
elsif Nkind (Op) = N_Slice then
return
Is_Unaliased (Prefix (Op))
- and then Entity (Prefix (Op)) /= Target;
+ and then Entity (Prefix (Op)) /= Tgt;
elsif Nkind (Op) = N_Op_Not then
- return Is_Safe_Operand (Right_Opnd (Op));
+ return Is_Safe_Operand (Right_Opnd (Op), Tgt);
else
return False;
@@ -15144,8 +15143,8 @@ package body Exp_Ch4 is
return False;
else
- Target := Entity (Lhs);
- return Is_Safe_Operand (Op1) and then Is_Safe_Operand (Op2);
+ return Is_Safe_Operand (Op1, Entity (Lhs))
+ and then Is_Safe_Operand (Op2, Entity (Lhs));
end if;
end Safe_In_Place_Array_Op;