Commit 90fa8613 by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Better error message on illegal 'Access on formal subprogram

This patch improves on the error message for an attempt to apply 'Access
to a formal subprogram. It also applies the check to a renaming of a formal
subprogram.

Compiling p.adb must yield:

p.adb:15:18: not subtype conformant with declaration at line 2
p.adb:15:18: formal subprograms are not subtype conformant (RM 6.3.1 (17/3))
p.adb:16:18: not subtype conformant with declaration at line 2
p.adb:16:18: formal subprograms are not subtype conformant (RM 6.3.1 (17/3))

----
package body P is
  procedure Non_Generic (P : access procedure (I : Integer)) is
  begin
    P.all (5);
  end Non_Generic;

  procedure G is
    procedure Local (I : Integer) is
    begin
      Action (I);
    end;
    procedure Local_Action (I : Integer) renames Action;
  begin
    Non_Generic (Local'access);
    Non_Generic (Local_Action'access);
    Non_Generic (Action'access);
    -- p.adb:15:18: not subtype conformant with declaration at line 2
    -- p.adb:15:18: formal subprograms not allowed
  end G;
end P;
----
package P is
  generic
    with procedure Action (I : Integer);
  procedure G;
end P;

2018-05-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch6.adb (Check_Conformance): Add RM reference for rule that a
	formal subprogram is never subtype conformqnt, and thus cannot be the
	prefix of 'Access.  Reject as well the attribute when applied to a
	renaming of a formal subprogram.

From-SVN: r260527
parent 3b26fe82
2018-05-22 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Check_Conformance): Add RM reference for rule that a
formal subprogram is never subtype conformqnt, and thus cannot be the
prefix of 'Access. Reject as well the attribute when applied to a
renaming of a formal subprogram.
2018-05-22 Hristian Kirtchev <kirtchev@adacore.com> 2018-05-22 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch3.adb (Build_Array_Init_Proc): Update the call to * exp_ch3.adb (Build_Array_Init_Proc): Update the call to
......
...@@ -5348,9 +5348,13 @@ package body Sem_Ch6 is ...@@ -5348,9 +5348,13 @@ package body Sem_Ch6 is
elsif Is_Formal_Subprogram (Old_Id) elsif Is_Formal_Subprogram (Old_Id)
or else Is_Formal_Subprogram (New_Id) or else Is_Formal_Subprogram (New_Id)
or else (Is_Subprogram (New_Id)
and then Present (Alias (New_Id))
and then Is_Formal_Subprogram (Alias (New_Id)))
then then
Conformance_Error ("\formal subprograms not allowed!"); Conformance_Error
return; ("\formal subprograms are not subtype conformant "
& "(RM 6.3.1 (17/3))");
end if; end if;
end if; end if;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment