From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!elma.epfl.ch!madmats From: madmats@elma.epfl.ch (Mats Weber) Newsgroups: comp.lang.ada Subject: Parameter passing mechanisms Message-ID: <890223140802.21a00384@elcc.epfl.ch> Date: 23 Feb 89 13:08:02 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet List-Id: Tim Harrison writes: >The program in question is not erroneous. LRM 6.2(13) says that "the value >of the formal is undefined after updating the actual other than by updating >formal." In the example program the actual is A_Vector and the formals are >V and W. The example program is only updating the formal (W) not the actual >(A_Vector).... My example was: > procedure Is_This_Program_Erroneous is > > type Vector is array (1..5) of Float; > > A_Vector : Vector := (0.35, 0.67, 1.8, 2.0, 7.7); > > procedure Add (V : in Vector; W : in out Vector) is > begin > for I in 1..5 loop > W(I) := V(I) + W(I); > end loop; > end Add; > > begin > Add(A_Vector, A_Vector); > end Is_This_Program_Erroneous; There are two points: 1) This program is not erroueous according to the LRM because its effect does not depend on whether V and W are passed by reference or by copy. 6.2(13) is a NOTE and according to LRM 1.2(7), notes are not part of the standard. The problem with 6.2(13) is that it is not a consequence of other rules. 2) 6.2(13) applies here because if V and W are passed by reference, the actual A_Vector is updated by the assignment W(1) := V(1) + W(1); other than by updating the formal V, which makes V(2..5) undefined according to 6.2(13). (See 6.2(7): "... by arranging that every use of the formal parameter be treated as a use of the associated actual parameter..."). Mats Weber Swiss Federal Institute of Technology EPFL DI LITh 1015 Lausanne Switzerland e-mail : madmats@elma.epfl.ch