Version 1.2 of acs/ac-00014.txt

Unformatted version of acs/ac-00014.txt version 1.2
Other versions for file acs/ac-00014.txt

!standard 6.1 (17)          01-10-16 AC95-00014/01
!class confirmation 01-10-16
!status received no action 01-10-10
!subject Visibility of parameter names
!summary
!appendix

!topic visibility of parameter names
!reference RM95-6.1(17)
!from Dan Eilers 01-10-10
!keywords visibility parameter
!discussion

package pak is
  type name is new integer;
  procedure p (name: integer; y: name);      -- legal reference to type name?
  function f (name: integer) return name;    -- legal reference to type name?
end pak;


Is it legal in Ada95 to use the direct name of a subprogram formal parameter
later in the subprogram_specification to refer to an earlier declaration with
the same name?

RM 95 6.1(17) says a formal parameter is an object directly visible
within a subprogram_body, but it doesn't make clear whether such
a parameter hides an earlier type definition referenced within the
subprogram specification.  Note: in Ada83, RM83-8.3(16) clearly made
both declarations illegal.

I believe GNAT rejects the first declaration, but accepts the second.

****************************************************************

From: Gary Dismukes
Sent: Wednesday, October 10, 2001  3:53 PM

Dan Eilers wrote:
>
> package pak is
>   type name is new integer;
>   procedure p (name: integer; y: name);      -- legal reference to type name?
>   function f (name: integer) return name;    -- legal reference to type name?
> end pak;
>
>
> Is it legal in Ada95 to use the direct name of a subprogram formal parameter
> later in the subprogram_specification to refer to an earlier declaration with
> the same name?

The type called 'name' is hidden from direct visibility within each of the
above subprogram declarations, because the integer parameters are homographs
of the type.  This is a consequence of the rules in 8.3(21-22).  So both
of the above subprogram declarations are illegal.

(As an aside, also note that there's a special legality rule given by
6.1(21) that makes it illegal to refer to a parameter within its
containing formal_part, so it can't be given as a default in that
context, but that's a different matter.)

> RM 95 6.1(17) says a formal parameter is an object directly visible
> within a subprogram_body, but it doesn't make clear whether such
> a parameter hides an earlier type definition referenced within the
> subprogram specification.  Note: in Ada83, RM83-8.3(16) clearly made
> both declarations illegal.

Actually the rule in RM83-8.3(16) is talking strictly about the name of the
subprogram and doesn't relate to the question of hiding by parameter names.

****************************************************************

Questions? Ask the ACAA Technical Agent