[Ada] Errors missed on ACATS test B650007

This ACATS test shows that we need to call Is_Immutably_Limited_Type
in Analyze_Function_Return and also that we have a latent bug in
Is_Immutably_Limited_Type which shouldn't look through private types.

gcc/ada/

	* sem_aux.adb (Is_Immutably_Limited_Type): Do not look through
	private types as per RM 7.5(8.1).
	* sem_ch6.adb (Analyze_Function_Return): Use
	Is_Immutably_Limited_Type as per RM 6.5(5.10).
This commit is contained in:
Arnaud Charlet 2022-04-02 17:29:09 +00:00 committed by Pierre-Marie de Rodat
parent 9af8c27f09
commit 5b0e8d6937
2 changed files with 7 additions and 14 deletions

View File

@ -1059,15 +1059,7 @@ package body Sem_Aux is
end if;
else
declare
Utyp : constant Entity_Id := Underlying_Type (Btype);
begin
if No (Utyp) then
return False;
else
return Is_Immutably_Limited_Type (Utyp);
end if;
end;
return False;
end if;
elsif Is_Concurrent_Type (Btype) then

View File

@ -1566,17 +1566,18 @@ package body Sem_Ch6 is
-- Check RM 6.5 (5.9/3)
if Has_Aliased then
if Has_Aliased and then not Is_Immutably_Limited_Type (R_Type) then
if Ada_Version < Ada_2012
and then Warn_On_Ada_2012_Compatibility
then
Error_Msg_N
("ALIASED only allowed for limited return objects "
& "in Ada 2012?y?", N);
("ALIASED only allowed for immutably limited return " &
"objects in Ada 2012?y?", N);
elsif not Is_Limited_View (R_Type) then
else
Error_Msg_N
("ALIASED only allowed for limited return objects", N);
("ALIASED only allowed for immutably limited return " &
"objects", N);
end if;
end if;