Skip to content

Illegal class-wide preconditions on Allocate/Deallocate_Subpool in 13.11.4 #173

@sttaft

Description

@sttaft

An AdaCore engineer noticed that the class-wide preconditions on Allocate/Deallocate_Subpool are both of the form:
Pre'Class => Pool_of_Subpool(Subpool) = Pool'Access

This precondition is commented out in GNAT.  If you try to uncomment it, you get:

s-stposu.ads:78:56: error: access attribute cannot be used as actual for universal_access equality
s-stposu.ads:99:56: error: access attribute cannot be used as actual for universal_access equality

The relevant rules are in 3.10.2(2/2, 2.1/2) which state:

For an attribute_reference with attribute_designator Access (or Unchecked_Access — see 13.10), the expected type shall be a single access type A such that:

  • A is an access-to-object type with designated type D and the type of the prefix is D'Class or is covered by D, or

It is hard to see how universal access would meet these requirements; universal access is the type of the parameter of the "=" operator being used in this class-wide precondition.

We could add a bullet here to specifically allow universal access as the expected type for 'Access, though that might require some thought as to whether this would make sense from a dynamic semantics point of view.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Bug ReportAn issue with the current Ada Reference Manual

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions