ada: Spurious error on class-wide preconditions

The compiler reports an spurious error when a class-wide precondition
expression has a class-wide type conversion.

gcc/ada/

	* sem_res.adb (Resolve_Type_Conversion): Do not warn on conversion
	to class-wide type on internally build helpers of class-wide
	preconditions.
This commit is contained in:
Javier Miranda 2023-07-27 11:02:20 +00:00 committed by Marc Poulhiès
parent c5f673dbc2
commit 3ad67df218

View file

@ -12455,6 +12455,18 @@ package body Sem_Res is
elsif Orig_T = Base_Type (Standard_Long_Long_Integer) then
null;
-- Do not warn on conversion to class-wide type on helpers of
-- class-wide preconditions because in this context the warning
-- would be spurious (since the class-wide precondition has been
-- installed in the return statement of the helper, which has a
-- class-wide formal type instead of a regular tagged type).
elsif Is_Class_Wide_Type (Orig_T)
and then Is_Subprogram_Or_Generic_Subprogram (Current_Scope)
and then Present (Class_Preconditions_Subprogram (Current_Scope))
then
null;
-- Here we give the redundant conversion warning. If it is an
-- entity, give the name of the entity in the message. If not,
-- just mention the expression.