diff options
| author | Eric Botcazou <ebotcazou@adacore.com> | 2025-11-11 21:12:54 +0100 |
|---|---|---|
| committer | Marc Poulhiès <dkm@gcc.gnu.org> | 2025-11-21 09:29:37 +0100 |
| commit | 35f7214070c05198baf266c12606d947b7c2280c (patch) | |
| tree | 54f3af586b664fbb72afb41a1969acae4bcb8a18 | |
| parent | f656344f5fad97f67bd12797a37bb5922021fd5c (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.adb | 23 |
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; |
