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.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: "G.B." Newsgroups: comp.lang.ada Subject: =?UTF-8?Q?Re:_How_to_get_Ada_to_=e2=80=9ccross_the_chasm=e2=80=9d?= =?UTF-8?Q?=3f?= Date: Sat, 5 May 2018 18:47:54 +0200 Organization: A noiseless patient Spider Message-ID: References: <1c73f159-eae4-4ae7-a348-03964b007197@googlegroups.com> <661b1ce8-f4e4-4a4b-9a07-ebe36d75f010@googlegroups.com> Reply-To: nonlegitur@notmyhomepage.de Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 5 May 2018 16:47:55 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="b629b9135d095756ff1fe6a481d71bd6"; logging-data="30488"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX195gS/EOaQ/cz0EDk1zgwRtIdWn5oum5zI=" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 In-Reply-To: <661b1ce8-f4e4-4a4b-9a07-ebe36d75f010@googlegroups.com> Content-Language: de-DE Cancel-Lock: sha1:VZi4tTpS4uR1JP1I/hiIShBCv3M= Xref: reader02.eternal-september.org comp.lang.ada:52011 Date: 2018-05-05T18:47:54+02:00 List-Id: On 04.05.18 21:05, Jere wrote: > 1. Dangling references: Keeping a reference to an object past its lifetime > > Ada: > *********************************************** > with Ada.Text_IO; use Ada.Text_IO; > > procedure jdoodle is > type Integer_Access is access all Integer; > > function Inner(Value : aliased in out Integer) return Integer_Access is > begin > return Value'Access; > end Inner; > > function Outer return Integer_Access is > Value : aliased Integer := 0; > begin > return Inner(Value); > end Outer; > > Ptr : Integer_Access := Outer; -- !!! Dangling reference > begin > Put_Line("Hello World"); > end jdoodle; Anything that can be done to prevent the above effect should be welcome, if it is representative of what the 2012 RM allows. Or is this new *aliased* parameter thing some I-know-what-I-am-doing Ada? So, do explicitly *aliased* parameters indeed break all accessiblity rules of Ada? I noticed that it is mentioned in the RM alongside parameters that are passed by reference already because their type is a by-reference type. I'd expect then, that one would drop *aliased* for those kinds of type, thus 27. with Ada.Text_IO; use Ada.Text_IO; 28. 29. procedure jdoodle2 is 30. type T is tagged 31. record 32. Data : Integer; 33. end record; 34. 35. type T_Access is access all T; 36. 37. function Inner(Value : in out T) return T_Access is 38. begin 39. return Value'Access; | >>> non-local pointer cannot point to local object 40. end Inner; 41. 42. function Outer return T_Access is 43. Value : aliased T := T'(Data => 0); 44. begin 45. return Inner(Value); 46. end Outer; 47. 48. Ptr : T_Access := Outer; 49. begin 50. Put_Line("Hello World"); 51. end jdoodle2; The same dangling pointer effect reappears, however, when I put *aliased* back, for no apparent reason: function Inner(Value : aliased in out T) return T_Access is begin return Value'Access; end Inner;