From 6332d8420e1069330ec15e58d97702c20fe856d6 Mon Sep 17 00:00:00 2001 From: Thomas Quinot Date: Tue, 29 Mar 2005 18:19:33 +0200 Subject: [PATCH] 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 * 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 --- gcc/ada/sem_cat.adb | 15 ++++++++++++--- gcc/ada/sem_util.adb | 18 +++++++++++------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/gcc/ada/sem_cat.adb b/gcc/ada/sem_cat.adb index 44d5f597467..a17521cad9d 100644 --- a/gcc/ada/sem_cat.adb +++ b/gcc/ada/sem_cat.adb @@ -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; diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 00fc1a19a59..fe354349b2c 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -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))