mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-02 08:40:26 +08:00
ada: Suppress warning for specific constant valid condition
Like in Exp_Ch4, we do not want to give warnings in Sem_Warn on a membership test with a mark for a subtype that is predicated. gcc/ada/ * sem_warn.adb (Warn_On_Constant_Valid_Condition): Bail out for a membership test with a mark for a subtype that is predicated.
This commit is contained in:
parent
0cb36c85ab
commit
188965afb1
@ -3290,6 +3290,44 @@ package body Sem_Warn is
|
||||
Left : constant Node_Id := Left_Opnd (Op);
|
||||
Right : constant Node_Id := Right_Opnd (Op);
|
||||
|
||||
function Comes_From_Simple_Condition_In_Source
|
||||
(Op : Node_Id) return Boolean;
|
||||
-- Return True if Op comes from a simple condition present in the source
|
||||
|
||||
-------------------------------------------
|
||||
-- Comes_From_Simple_Condition_In_Source --
|
||||
-------------------------------------------
|
||||
|
||||
function Comes_From_Simple_Condition_In_Source
|
||||
(Op : Node_Id) return Boolean
|
||||
is
|
||||
Orig_Op : constant Node_Id := Original_Node (Op);
|
||||
|
||||
begin
|
||||
if not Comes_From_Source (Orig_Op) then
|
||||
return False;
|
||||
end if;
|
||||
|
||||
-- We do not want to give warnings on a membership test with a mark
|
||||
-- for a subtype that is predicated, see also Exp_Ch4.Expand_N_In.
|
||||
|
||||
if Nkind (Orig_Op) = N_In then
|
||||
declare
|
||||
Orig_Rop : constant Node_Id :=
|
||||
Original_Node (Right_Opnd (Orig_Op));
|
||||
begin
|
||||
if Is_Entity_Name (Orig_Rop)
|
||||
and then Is_Type (Entity (Orig_Rop))
|
||||
and then Present (Predicate_Function (Entity (Orig_Rop)))
|
||||
then
|
||||
return False;
|
||||
end if;
|
||||
end;
|
||||
end if;
|
||||
|
||||
return True;
|
||||
end Comes_From_Simple_Condition_In_Source;
|
||||
|
||||
True_Result : Boolean;
|
||||
False_Result : Boolean;
|
||||
|
||||
@ -3298,7 +3336,7 @@ package body Sem_Warn is
|
||||
-- scalar operands are valid.
|
||||
|
||||
if Constant_Condition_Warnings
|
||||
and then Comes_From_Source (Original_Node (Op))
|
||||
and then Comes_From_Simple_Condition_In_Source (Op)
|
||||
and then Is_Scalar_Type (Etype (Left))
|
||||
and then Is_Scalar_Type (Etype (Right))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user