sem_cat.adb (Validate_Remote_Types_Type_Conversion): Perform check to forbid conversion of a local access-to-subprogram type to a...

2005-03-29  Thomas Quinot  <quinot@adacore.com>

	* sem_cat.adb (Validate_Remote_Types_Type_Conversion): Perform check to
	forbid conversion of a local access-to-subprogram type to a remote one.

	* sem_util.adb (Wrong_Type): For a record type that is the expanded
	equivalent type for a remote access-to-subprogram type, go back to the
	original RAS entity when displaying an error message, so the casing is
	the original source casing.

From-SVN: r97182
This commit is contained in:
Thomas Quinot 2005-03-29 18:19:33 +02:00 committed by Arnaud Charlet
parent 73e69194b5
commit 6332d8420e
2 changed files with 23 additions and 10 deletions

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2004, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@ -1529,13 +1529,22 @@ package body Sem_Cat is
if Is_Remote_Access_To_Subprogram_Type (E)
and then not Is_Remote_Access_To_Subprogram_Type (S)
then
Error_Msg_N ("incorrect conversion of remote operand", N);
Error_Msg_N
("incorrect conversion of remote operand to local type", N);
return;
elsif not Is_Remote_Access_To_Subprogram_Type (E)
and then Is_Remote_Access_To_Subprogram_Type (S)
then
Error_Msg_N
("incorrect conversion of local operand to remote type", N);
return;
elsif Is_Remote_Access_To_Class_Wide_Type (E)
and then not Is_Remote_Access_To_Class_Wide_Type (S)
then
Error_Msg_N ("incorrect conversion of remote operand", N);
Error_Msg_N
("incorrect conversion of remote operand to local type", N);
return;
end if;

View File

@ -6770,16 +6770,20 @@ package body Sem_Util is
Found_Scope := Scope (Found_Scope);
exit when Expec_Scope = Standard_Standard
or else
Found_Scope = Standard_Standard
or else
not Comes_From_Source (Expec_Scope)
or else
not Comes_From_Source (Found_Scope);
or else Found_Scope = Standard_Standard
or else not Comes_From_Source (Expec_Scope)
or else not Comes_From_Source (Found_Scope);
end loop;
end;
Error_Msg_NE ("expected}!", Expr, Expec_Type);
if Is_Record_Type (Expec_Type)
and then Present (Corresponding_Remote_Type (Expec_Type))
then
Error_Msg_NE ("expected}!", Expr,
Corresponding_Remote_Type (Expec_Type));
else
Error_Msg_NE ("expected}!", Expr, Expec_Type);
end if;
if Is_Entity_Name (Expr)
and then Is_Package (Entity (Expr))