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=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Natasha Kerensikova Newsgroups: comp.lang.ada Subject: Are limited interfaces deeper than non-limited ones? Date: Sun, 9 Apr 2017 20:52:28 -0000 (UTC) Organization: A noiseless patient Spider Message-ID: Injection-Date: Sun, 9 Apr 2017 20:52:28 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="4e799baad3b59694b44d5175bae40e0e"; logging-data="20502"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18A3sv/uUcWiiE4rAN4LjxQ" User-Agent: slrn/1.0.3 (FreeBSD) Cancel-Lock: sha1:FycRjaP3KDnXZuVGg4dBCJM4GXs= Xref: news.eternal-september.org comp.lang.ada:46557 Date: 2017-04-09T20:52:28+00:00 List-Id: Hello, I know that accessibility levels come with a host of problems, but I thought that static accessibility was reasonably well understood, and yet I encounter this very strage situation. Everything else being otherwise equal, everything works fine with a non-limited interface, but GNAT FSF v6.3.1 rejects the limited interface. Is there something wrong with my GNAT or is there really something I miss going on here? Thanks in advance for your help, Natasha ----- mini.ads ------ generic type Held_Data (<>) is limited private; package Mini is type Holder is private; function Create (Constructor : not null access function return Held_Data) return Holder; private type Data_Access is access Held_Data; type Holder is record Ref : Data_Access; end record; end Mini; ----- mini.adb ------ package body Mini is function Create (Constructor : not null access function return Held_Data) return Holder is begin return (Ref => new Held_Data'(Constructor.all)); end Create; end Mini; ----- non_lim.ads ------ with Mini; package Non_Lim is type Data is interface; package Instance is new Mini (Data'Class); end Non_Lim; ----- lim.ads ------ with Mini; package Lim is type Data is limited interface; package Instance is new Mini (Data'Class); end Lim; ----- GNAT output ------ $ gnatmake non_lim.ads ada -c non_lim.ads ada -c mini.adb $ gnatmake lim.ads ada -c lim.ads lim.ads:7:04: warning: in instantiation at mini.adb:7 lim.ads:7:04: warning: accessibility check failure lim.ads:7:04: warning: "Program_Error" will be raised at run time