!standard H.4(20/2) 19-02-26 AI12-0318-1/02 !standard H.4(24/3) !class binding interpretation 19-02-22 !status Amendment 1-2012 19-02-26 !status WG9 Approved 22-06-22 !status ARG Approved 10-0-0 19-02-26 !status work item 19-02-22 !status received 19-02-14 !priority Low !difficulty Easy !qualifier Omission !subject No_IO should apply to Ada.Directories !summary Ada.Directories is added to the list of packages not allowed by restriction No_IO. !question Restriction No_IO (see H.4) includes a list of packages that aren't allowed. But Ada.Directories isn't on that list. Should it be on the list? (Yes.) !recommendation (See Summary.) !wording Modify H.4(20/2): Semantic dependence on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, [or] Stream_IO{, or Directories} is not allowed. Modify H.4(24/3): If an implementation supports pragma Restrictions for a particular argument, then except for the restrictions [No_Unchecked_Deallocation, No_Unchecked_Conversion, ]No_Access_Subprograms, No_Unchecked_Access, No_Specification_of_Aspect, No_Use_of_Attribute, No_Use_of_Pragma, {No_Dependence => Ada.Unchecked_Conversion, }and [the equivalent use of] No_Dependence {=> Ada.Unchecked_Deallocation}, the associated restriction applies to the run-time system. Delete AARM H.4(24.e/3). !discussion The modification to H.4(24/3) is to eliminate obsolescent restrictions from the rule; we generally do not mention Annex J features in the rest of the Standard. Since the runtime does not have to be written in Ada anyway, it is only the effect, and not the specific restrictions used, that matters. Thus there is no need to mention the Annex J restrictions here. The AARM note is explaining the old wording means essentially what the new wording says explicitly, there is no need for it now. !corrigendum H.4(20/2) @drepl @xhang<@xterm Semantic dependence on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO is not allowed.> @dby @xhang<@xterm Semantic dependence on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, Stream_IO, or Directories is not allowed.> !corrigendum H.4(24/3) @drepl If an implementation supports @fa Restrictions for a particular argument, then except for the restrictions No_Unchecked_Deallocation, No_Unchecked_Conversion, No_Access_Subprograms, No_Unchecked_Access, No_Specification_of_Aspect, No_Use_of_Attribute, No_Use_of_Pragma, and the equivalent use of No_Dependence, the associated restriction applies to the run-time system. @dby If an implementation supports @fa Restrictions for a particular argument, then except for the restrictions No_Access_Subprograms, No_Unchecked_Access, No_Specification_of_Aspect, No_Use_of_Attribute, No_Use_of_Pragma, No_Dependence =@> Ada.Unchecked_Conversion, and No_Dependence =@> Ada.Unchecked_Deallocation, the associated restriction applies to the run-time system. !ASIS No ASIS effect. !ACATS test !appendix From: Randy Brukardt Sent: Thursday, February 14, 2019 8:06 PM In putting the changes of AI12-0020-1, I happened to notice some old errors: (1) H.4(24/3) mentions restrictions No_Unchecked_Deallocation and No_Unchecked_Conversion. But these were moved to Annex J by AI195-00394-01 in favor of a Note (H.4(28/2)). It does mention "equivalent use of No_Dependence", but that's more complex than needed. This paragraph should be replaced by something like: If an implementation supports pragma Restrictions for a particular argument, then except for the restrictions No_Access_Subprograms, No_Unchecked_Access, No_Specification_of_Aspect, No_Use_of_Attribute, No_Use_of_Pragma, No_Dependence => Ada.Unchecked_Conversion, and No_Dependence => Ada.Unchecked_Deallocation, the associated restriction applies to the run-time system. I suppose one could argue that the old wording allowed the old restrictions to be used in the runtime, but that seems irrelevant (the runtime doesn't need to be implemented in Ada anyway, so the implementation can do anything that gets the right effect). And we generally try not to mention Annex J things outside of Annex J. (2) No_IO gives a list library units that are excluded. I'd suggest that Directories be included in this list, since Directories exists mainly to support those other units. ****************************************************************