From e9238cc1213a6de02d0b17d4581149af71f6a409 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 6 Sep 2017 12:09:23 +0200 Subject: [PATCH] [multiple changes] 2017-09-06 Yannick Moy * sem_res.adb (Resolve): Update message for function call as statement. 2017-09-06 Ed Schonberg * sem_ch6.adb (Check_Returns): Clean up warnings coming from generated bodies for renamings that are completions, when renamed procedure is No_Return. * sem_ch8.adb (Analyze_Subprogram_Renaming): Implement legality rule in 6.5.1 (7/2): if a renaming is a completion of a subprogram with No_Return, the renamed entity must be No_Return as well. From-SVN: r251768 --- gcc/ada/ChangeLog | 13 +++++++++++++ gcc/ada/sem_ch6.adb | 6 +++++- gcc/ada/sem_ch8.adb | 8 ++++++++ gcc/ada/sem_res.adb | 5 ++++- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e5e1c7d0d68..785a11a8a1f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,16 @@ +2017-09-06 Yannick Moy + + * sem_res.adb (Resolve): Update message for function call as statement. + +2017-09-06 Ed Schonberg + + * sem_ch6.adb (Check_Returns): Clean up warnings coming from + generated bodies for renamings that are completions, when renamed + procedure is No_Return. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Implement legality + rule in 6.5.1 (7/2): if a renaming is a completion of a subprogram + with No_Return, the renamed entity must be No_Return as well. + 2017-09-06 Hristian Kirtchev * exp_ch5.adb, freeze.adb, exp_ch4.adb, exp_ch6.adb, lib-xref.adb: diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 837f390a2ef..64d87b27154 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -6693,7 +6693,11 @@ package body Sem_Ch6 is Error_Msg_N ("implied return after this statement " & "would have raised Program_Error", Last_Stm); - else + + -- In normal compilation mode, do not warn on a generated + -- call (e.g. in the body of a renaming as completion). + + elsif Comes_From_Source (Last_Stm) then Error_Msg_N ("implied return after this statement " & "will raise Program_Error??", Last_Stm); diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index ca9ac47950f..82f82d7c4ed 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -2946,6 +2946,14 @@ package body Sem_Ch8 is Check_Fully_Conformant (New_S, Rename_Spec); Set_Public_Status (New_S); + if No_Return (Rename_Spec) + and then not No_Return (Entity (Nam)) + then + Error_Msg_N ("renaming completes a No_Return procedure", N); + Error_Msg_N + ("\renamed procedure must be nonreturning (RM 6.5.1 (7/2))", N); + end if; + -- The specification does not introduce new formals, but only -- repeats the formals of the original subprogram declaration. -- For cross-reference purposes, and for refactoring tools, we diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 79e21e83e1d..6c0d1a7a093 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -2533,8 +2533,11 @@ package body Sem_Res is and then Ekind (Entity (Name (N))) = E_Function then Error_Msg_NE - ("cannot use function & in a procedure call", + ("cannot use call to function & as a statement", Name (N), Entity (Name (N))); + Error_Msg_N + ("\return value of a function call cannot be ignored", + Name (N)); -- Otherwise give general message (not clear what cases this -- covers, but no harm in providing for them). -- 2.30.2