Implementation Advice (GNAT Reference Manual) (original) (raw)
The main text of the Ada Reference Manual describes the required behavior of all Ada compilers, and the GNAT compiler conforms to these requirements.
In addition, there are sections throughout the Ada Reference Manual headed by the phrase ‘Implementation advice’. These sections are not normative, i.e., they do not specify requirements that all compilers must follow. Rather they provide advice on generally desirable behavior. They are not requirements, because they describe behavior that cannot be provided on all systems, or may be undesirable on some systems.
As far as practical, GNAT follows the implementation advice in the Ada Reference Manual. Each such RM section corresponds to a section in this chapter whose title specifies the RM section number and paragraph number and the subject of the advice. The contents of each section consists of the RM text within quotation marks, followed by the GNAT interpretation of the advice. Most often, this simply says ‘followed’, which means that GNAT follows the advice. However, in a number of cases, GNAT deliberately deviates from this advice, in which case the text describes what GNAT does and why.
- RM 1.1.3(20): Error Detection
- RM 1.1.3(31): Child Units
- RM 1.1.5(12): Bounded Errors
- RM 2.8(16): Pragmas
- RM 2.8(17-19): Pragmas
- RM 3.5.2(5): Alternative Character Sets
- RM 3.5.4(28): Integer Types
- RM 3.5.4(29): Integer Types
- RM 3.5.5(8): Enumeration Values
- RM 3.5.7(17): Float Types
- RM 3.6.2(11): Multidimensional Arrays
- RM 9.6(30-31): Duration’Small
- RM 10.2.1(12): Consistent Representation
- RM 11.4.1(19): Exception Information
- RM 11.5(28): Suppression of Checks
- RM 13.1 (21-24): Representation Clauses
- RM 13.2(6-8): Packed Types
- RM 13.3(14-19): Address Clauses
- RM 13.3(29-35): Alignment Clauses
- RM 13.3(42-43): Size Clauses
- RM 13.3(50-56): Size Clauses
- RM 13.3(71-73): Component Size Clauses
- RM 13.4(9-10): Enumeration Representation Clauses
- RM 13.5.1(17-22): Record Representation Clauses
- RM 13.5.2(5): Storage Place Attributes
- RM 13.5.3(7-8): Bit Ordering
- RM 13.7(37): Address as Private
- RM 13.7.1(16): Address Operations
- RM 13.9(14-17): Unchecked Conversion
- RM 13.11(23-25): Implicit Heap Usage
- RM 13.11.2(17): Unchecked Deallocation
- RM 13.13.2(1.6): Stream Oriented Attributes
- RM A.1(52): Names of Predefined Numeric Types
- RM A.3.2(49): Ada.Characters.Handling
- RM A.4.4(106): Bounded-Length String Handling
- RM A.5.2(46-47): Random Number Generation
- RM A.10.7(23): Get_Immediate
- RM A.18: Containers
- RM B.1(39-41): Pragma Export
- RM B.2(12-13): Package Interfaces
- RM B.3(63-71): Interfacing with C
- RM B.4(95-98): Interfacing with COBOL
- RM B.5(22-26): Interfacing with Fortran
- RM C.1(3-5): Access to Machine Operations
- RM C.1(10-16): Access to Machine Operations
- RM C.3(28): Interrupt Support
- RM C.3.1(20-21): Protected Procedure Handlers
- RM C.3.2(25): Package Interrupts
- RM C.4(14): Pre-elaboration Requirements
- RM C.5(8): Pragma Discard_Names
- RM C.7.2(30): The Package Task_Attributes
- RM D.3(17): Locking Policies
- RM D.4(16): Entry Queuing Policies
- RM D.6(9-10): Preemptive Abort
- RM D.7(21): Tasking Restrictions
- RM D.8(47-49): Monotonic Time
- RM E.5(28-29): Partition Communication Subsystem
- RM F(7): COBOL Support
- RM F.1(2): Decimal Radix Support
- RM G: Numerics
- RM G.1.1(56-58): Complex Types
- RM G.1.2(49): Complex Elementary Functions
- RM G.2.4(19): Accuracy Requirements
- RM G.2.6(15): Complex Arithmetic Accuracy
- RM H.6(15/2): Pragma Partition_Elaboration_Policy