comp.lang.ada
 help / color / mirror / Atom feed
* Accessibility check failure with Implicit_Dereference aspect
@ 2014-08-12 17:03 Lucretia
  2014-08-13  9:10 ` Stephen Leake
  0 siblings, 1 reply; 3+ messages in thread
From: Lucretia @ 2014-08-12 17:03 UTC (permalink / raw)


Hi,

I've tried this a number of times and still cannot get this thing to work like the documentation (Barnes, Gem's, etc.) say that it's supposed to unless I'm missing something.

I have this:

generic
   type T is new Quicksilver.Containers.Counted_Items.Counted_Item with private;
package Quicksilver.Containers.Smart_Pointers is
   type Access_T is access all T;

   --  Provide an accessor for the counted item that we can return from functions.
   type Reference (Element : not null access T) is limited private with
     Implicit_Dereference => Element;

   --  TODO: Place inside a generic package to constrain the type?
   type Smart_Pointer is new Ada.Finalization.Controlled with private;

   ...

   not overriding
   function Get (Self : in Smart_Pointer) return Reference;
   ...
end Quicksilver.Containers.Smart_Pointers;

On compiling a test, I get the following warnings:

Compiling: /home/laguest/src/mine/sterling-os/quicksilver/unit_tests/test_suite-smart_pointer_tests.adb
Source file time stamp: 2014-08-12 15:21:32
Compiled at: 2014-08-12 17:59:55

==============Error messages for source file: /home/laguest/src/mine/sterling-os/quicksilver/unit_tests/test_suite-smart_pointer_tests.ads
    46.    package Datum_Smart_Pointers is new Quicksilver.Containers.Smart_Pointers (T => Datum);
           |
        >>> warning: in instantiation at quicksilver-containers-smart_pointers.adb:50
        >>> warning: accessibility check failure
        >>> warning: "Program_Error" will be raised at run time
        >>> warning: in instantiation at quicksilver-containers-smart_pointers.adb:67
        >>> warning: accessibility check failure
        >>> warning: "Program_Error" will be raised at run time

 74 lines: No errors, 6 warnings

and the line it's complaining about at line 50 is:

   not overriding
   function Get (Self : in Smart_Pointer) return Reference is
   begin
      --  Keep a copy of the smart pointer inside the reference to stop it from being deallocated.
      return Reference'(Element => Self.Data, Hold => Self);
   end Get;

Specifically the "Element => Self.Data" part.

Has anyone managed to do this?

I've tried with latest GCC trunk, GNAT 4.10.0 20140807 (experimental) and GNAT GPL 2014 and get the same issues.

Is this a compiler issue or me?

Thanks,
Luke A. Guest.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Accessibility check failure with Implicit_Dereference aspect
  2014-08-12 17:03 Accessibility check failure with Implicit_Dereference aspect Lucretia
@ 2014-08-13  9:10 ` Stephen Leake
  2014-08-13 18:38   ` Luke A. Guest
  0 siblings, 1 reply; 3+ messages in thread
From: Stephen Leake @ 2014-08-13  9:10 UTC (permalink / raw)


Lucretia <laguest9000@googlemail.com> writes:

> generic
>    type T is new Quicksilver.Containers.Counted_Items.Counted_Item with private;
> package Quicksilver.Containers.Smart_Pointers is
>    type Access_T is access all T;
>
> <snip>
>
> On compiling a test, I get the following warnings:
>
>         >>> warning: accessibility check failure
>
> Is this a compiler issue or me?

accessibility checks have to do with not creating dangling pointers;
they depend on exactly where the type is declared and where the access
value is created and used. So we need to see the entire program to help.

In general, if the access type is at library level, there will be no
accessibility issues.

-- 
-- Stephe


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Accessibility check failure with Implicit_Dereference aspect
  2014-08-13  9:10 ` Stephen Leake
@ 2014-08-13 18:38   ` Luke A. Guest
  0 siblings, 0 replies; 3+ messages in thread
From: Luke A. Guest @ 2014-08-13 18:38 UTC (permalink / raw)


Stephen Leake <stephen_leake@stephe-leake.org> wrote:

> accessibility checks have to do with not creating dangling pointers;
> they depend on exactly where the type is declared and where the access
> value is created and used. So we need to see the entire program to help.
> 
> In general, if the access type is at library level, there will be no
> accessibility issues.

Thanks but I got it sorted and deleted this post.

It was an anonymous access type in the controlled type and freeing based on
a defined access type.

Like

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-08-13 18:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-12 17:03 Accessibility check failure with Implicit_Dereference aspect Lucretia
2014-08-13  9:10 ` Stephen Leake
2014-08-13 18:38   ` Luke A. Guest

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox