=========================
GNAT 18 NEW FEATURES LIST
=========================

Copyright (C) 2021, AdaCore

This file contains a complete list of new features in version 18 of GNAT. A
full description of all GNAT features can be found in the GNAT User's Guide
and GNAT Reference Manual.

An ISO date (YYYY-MM-DD) appears in parentheses after the description line.
This date shows the implementation date of the feature. Any 18.0w wavefront
subsequent to this date will contain the indicated feature, as will any
subsequent 18 or later release.

NF-R321-049 Disable binder creation of main task secondary stack (2018-05-01)

  Users can now specify that the binder should not create a
  secondary stack for the main (environment) task, by using the
  binder switch -Q0. This is useful for ZFP runtime users who
  allocate secondary stacks for their application themselves.

NF-QB24-012 Implement workarounds for LEON3FT FPU and AHB errata (2017-12-07)

  The compiler switches -mfix-ut699 and -mfix-ut699e have been
  enhanced to work around the issues present in Cobham Gaisler's
  UT699, UT699E, and UT700 LEON3FT processors and documented in the
  new errata sheet titled "GRFPU Floating-point controller: Missing
  FDIV/FSQRT Result". The switch -mfix-ut699e has been enhanced to
  work around the issues present in Cobham Gaisler's UT699E, and
  UT700 LEON3FT processors and documented in the new errata sheet
  titled "LEON3/FT AHB Deadlock After Sequence of Load and Atomic
  Instructions".

NF-QB06-032 Legacy elaboration model and relaxed mode (2017-11-27)

  The pre-18.x elaboration model is now referred to as "legacy
  elaboration model" and is available under compilation switch
  -gnatH.

  A new less restrictive mode of elaboration checks referred to as
  "relaxed elaboration mode" is available under compilation switch
  -gnatJ.

  Consult the GNAT Native User's Guide for further details.

NF-QB06-031 Selective suppression of elaboration warnings (2017-11-27)

  Warnings related to access-before-elaboration issues can now be
  suppressed selectively using pragma Warnings (Off). In addition,
  global suppression is available via compiler switches -gnatwL and
  -gnatws.

NF-QA18-024 Display command name in unhandled exception message (2017-11-08)

  When using traceback information in messages (binder switch -E),
  the message displayed in case of an unhandled exception now
  includes the name of the command launched (as available via "Argv
  (0)").

NF-QA02-019 Dimension specifications for integer types (2017-10-02)

  When the root type of a dimensioned system is an integer type, the
  compiler now accepts dimension specifications that are other than
  nonnegative integers. Operations with fractional exponents on
  integer values are in general meaningless, but the dimensional
  analysis can still perform useful static checks on the code.

NF-QA02-016 Dimensionality system accepts comparisons to literal (2017-10-03)

  The GNAT dimensionality system now accepts, with a warning, the
  comparison between a dimensioned expression and a literal. For the
  special case of literal zero (0 or 0.0), no warning is issued.

NF-Q918-022 New gnatcheck rule Specific_Type_Invariants (2017-09-19)

  This rule flags definitions of (non-class-wide) Type_Invariant
  aspects that are parts of tagged type declarations.

NF-Q911-005 Support for overloaded functions in C++ binding (2017-09-22)

  The C++ bindings generated by means of the -fdump-ada-spec option
  now support overloaded functions.

NF-Q831-030 Support for reverse iteration on formal containers (2017-09-21)

  The Iterable aspect that defines formal containers has been
  extended so that two new operations can be included in the aspect:
  Last and Previous. These operations are optional; if present, they
  allow the programmer to specify a reverse iteration over such a
  container, using the reverse keyword on the corresponding loop.
  This provides the same functionality as that available on
  predefined containers that implement the Reversible_Iterator
  interface.

NF-Q831-019 Static allocation of secondary dispatch tables (2017-09-15)

  For library-level tagged types that implement interface types, the
  compiler generates code that statically allocates their secondary
  dispatch tables in read-only memory.

NF-Q817-013 More aggressive inlining of expression functions (2017-08-30)

  Expression functions are now inlined more aggressively when
  optimization is enabled, overriding most of the usual heuristics.

NF-Q814-002 Improve type name matching in gnatdbg (2017-08-14)

  Both gnatdbg.printers.PrettyPrinter and
  gnatdbg.generics.Match.TypeName have been enhanced to be able to
  match pretty GDB type names (i.e. the result of `str(gdb_type)`)
  in addition to their raw names (`gdb_type.name` or
  `gdb_type.tag`).

NF-Q803-008 gnatdbg: TypeName can recurse on basis types (2017-08-03)

  gnatdbg.generics.Match.TypeName is now able to recurse on basis
  types (typedef'd types or integer sub-range basis type) in order
  to find one type that matches the given name.

NF-Q803-006 gnatdbg: TypeName can match names with regexps (2017-08-03)

  gnatdbg.generics.Match.TypeName is now able to check that the name
  of input types matches a given regular expression.

NF-Q801-020 Restriction lifted on Discard_Names in ravenscar-sfp (2017-08-04)

  The ravenscar-sfp runtime profiles used to discard identifier
  names. This made Enum'Image, for example, return the
  representation value instead of the actual name. This restriction
  is no longer present.

NF-Q731-035 Clock on Linux is now monotonic (2017-08-22)

  The high-resolution system clock for tasking operations on Linux
  was previously subject to time jumps and was at the mercy of a
  privileged user resetting the clock and wreaking havoc with delay
  and sleep operations. The clock has been enhanced to be monotonic
  and is no longer subject to the aforementioned perturbations.

NF-Q731-023 Improved performance of 'Image for enumeration types (2017-08-22)

  The compiler generates faster code for attribute Image applied to
  user-defined enumeration types when the sources are compiled with
  optimizations enabled.

NF-Q727-023 Improve interrupt handling on bare-metal Cortex-A/R (2017-08-04)

  The Ravenscar runtimes targeting the Xilinx ZynQ7000 and the
  Hercules TMS570 now support FPU and SIMD operations in interrupt
  handlers. The ZynQ runtimes now also support nested interrupt
  handling.

NF-Q727-004 gnatpp: source location on crash (2017-11-21)

  If gnatpp detects an error in itself, it attempts to indicate the
  line and column numbers of the code that caused the problem.

NF-Q724-005 Efficient array reset for all elementary types (2017-07-24)

  The compiler now generates efficient code to reset a large array
  of any elementary component type to zeros, or an equivalent value
  for the component type, so now includes arrays of floating-point
  and access values instead of being limited to arrays with a
  discrete component type.

NF-Q721-027 Pragma Ada_2020 (2017-07-21)

  Pragma Ada_2020 can be used to enable Ada 2020 features that have
  been implemented in GNAT. Ada_2020 is a configuration pragma. This
  is in addition to the -gnat2020 command-line switch.

NF-Q713-001 More accurate C binding for enumerals and constants (2017-07-30)

  The C and C++ bindings generated by means of the -fdump-ada-spec
  option can now use a more accurate Ada type for enumeral types and
  support the declaration of const-qualified variables.

NF-Q630-016 Improved support for 64-bit timers in Ravenscar (2017-08-25)

  When a 64-bit timer is available in the hardware, the Ravenscar
  runtimes targeting bare-metal platforms can now take advantage of
  it to support 64-bit delays, thus lowering the number of
  interrupts generated for long delays.

NF-Q622-007 Direct conversion from unsigned subtype to FP type (2017-06-23)

  On 32-bit RISC platforms, the compiler now generates a direct
  conversion from a 32-bit unsigned subtype of a 64-bit base type to
  a floating-point type instead of calling a dedicated routine.

NF-Q621-023 PolyORB: iac: ignore pragma javaPackage (2017-08-11)

  The IDL-to-Ada compiler iac now ignores pragma javaPackage. This
  is a convenience for those also using idlj (idl-to-java), because
  idlj recognizes that pragma.

NF-Q621-008 New gnatcheck rule Numeric_Indexing (2017-06-21)

  A new gnatcheck rule Numeric_Indexing flags integer literals used
  as index expressions.

NF-Q614-049 Refine warning on redundant comparison to True (2017-06-15)

  In many cases, comparing the value of an expression to True is a
  matter of preference to decide what is clearer. Thus, in such
  cases the use of -gnatwr may lead to spurious warnings. This is
  revised: GNAT now only warns on comparisons with True when the
  expression being compared is an object name or a simple expression
  involving an operator.

NF-Q605-018 Better error messages when loading sources (2017-09-08)

  Compiler provides more descriptive error output in the case where
  a source file has bad permissions (no read access).

NF-Q602-004 New function To_Ada in GNAT.Sockets (2017-05-25)

  A new function GNAT.Sockets.To_Ada supports converting externally
  created socket descriptors to type Socket_Type for use with other
  operations in package GNAT.Sockets.

NF-Q518-003 Warning on potential C++ ABI mismatch on ARM (2017-05-06)

  With -Wpsabi on ARM, the compiler now warns in corner case
  situations where it knows it could possibly generate wrong code
  for complex C++ constructs involving method calls passing vectors
  of composite elements as arguments. The issue warned against is a
  possible caller/callee disagreement about what arguments-passing
  convention to use, leading to crashes at run time.

NF-Q512-036 More expressions allowed in Pure_Barriers (2017-06-08)

  Type conversions and subcomponents of a protected object are now
  allowed to be specified in entry barriers under the restriction
  Pure_Barriers. The following constraints apply: type conversions
  cannot potentially raise Constraint_Error and subcomponents cannot
  be selected from a prefix that is a dereferenced access value.

NF-Q502-035 Enhanced -gnatR3 output for simple dynamic records (2017-05-03)

  The representation information given by the compiler when the
  -gnatR3 switch is specified now includes size information for
  simple dynamic record types without discriminants.

NF-Q428-038 New parameter for gnatcheck rule Metrics_LSLOC (2017-05-30)

  A new optional parameter Subprograms is added to the gnatcheck
  Metrics_LSLOC rule. This parameter allows restricting checks made
  by this rule to subprogram bodies only.

NF-Q428-036 New gnatcheck rule Too_Many_Primitives (2017-06-01)

  This rule flags any tagged type declaration that has more than N
  user-defined primitive operations (counting both inherited but not
  overridden and explicitly declared ones, but not counting
  predefined operators), where N is a rule parameter.

NF-Q428-034 New gnatcheck rule Too_Many_Dependencies (2017-06-28)

  This rule flags a library item or a subunit that immediately
  depends on more than N library units (where N is a rule
  parameter). In the case of a dependency on a child unit, implicit
  and explicit dependencies on the child unit's parents are not
  counted.

NF-Q428-032 New gnatcheck rule Deep_Library_Hierarchy (2017-06-02)

  This rule flags any library package declaration, library generic
  package declaration, or library package instantiation that has
  more than N parents and grandparents (that is, the name of such a
  library unit contains more than N dots), where N is a rule
  parameter.

NF-Q428-031 New gnatcheck rule Printable_ASCII (2017-07-10)

  This rule flags characters in source code that are not part of the
  printable ASCII character set.

NF-Q428-028 New gnatcheck rule No_Inherited_Classwide_Pre (2017-07-07)

  This rule flags a declaration of an overriding primitive operation
  of a tagged type if at least one of the operations it overrides or
  implements does not have any (explicitly defined or inherited)
  Pre'Class attribute defined for it.

NF-Q428-027 New gnatcheck rule Constructors (2017-05-26)

  This rule flags any declaration of a primitive function of a
  tagged type that has a controlling result and no controlling
  parameter. If a declaration is a completion of another declaration
  then it is not flagged.

NF-Q428-025 New gnatcheck rule Specific_Pre_Post (2017-07-03)

  This rule flags each Pre and Post aspect that is a part of an
  explicit declaration of a primitive operation of a tagged type.
  Pre'Class and Post'Class aspects are not flagged.

NF-Q428-022 New gnatcheck rule Specific_Parent_Type_Invariant (2017-06-30)

  This rule flags record extensions and private extensions having a
  parent type that specifies a Type_Invariant aspect. A record
  extension is not flagged when it is a completion of a private
  extension.

NF-Q428-014 New gnatcheck rule Downward_View_Conversions (2017-07-11)

  This rule flags downward view conversions.

NF-Q428-013 New gnatcheck rule Subprogram_Access (2017-05-10)

  This rule flags access_to_subprogram_definitions and
  access_definitions that define access-to-subprogram types.

NF-Q428-012 New gnatcheck rule Expression_Functions (2017-05-05)

  This rule flags definitions of expression functions in package
  specifications (including generic packages).

NF-Q428-010 New gnatcheck rule Representation_Specifications (2017-05-02)

  This rule flags aspect_clauses (formerly known as
  representation_clauses) and aspect_specifications that define
  representation aspects.

NF-Q427-025 Extended version of -gnatR for record subcomponents (2017-06-16)

  The new -gnatRe variant of the -gnatR switch makes the compiler
  output extended representation information for record components
  that are themselves records, displaying information about their
  subcomponents.

NF-Q417-012 Speedup for functions returning unconstrained arrays (2017-04-17)

  The compiler now generates more efficient object code for simple
  functions returning an unconstrained array type, for example
  Ada.Numerics.Real_Arrays.Eigenvalues as implemented in GNAT.

NF-Q412-031 User-defined directory in recompilable BSPs (2017-09-09)

  This commit adds a directory in BSPs where users can add their own
  source files to have them included in their recompilable runtime.
  Such a directory is located in
  <target>/BSPs/<arch>/<bard>/<rts>/user_srcs.

NF-Q406-070 Removal of restriction on inlining in related units (2017-04-19)

  The compiler can now inline into a child package a subprogram
  declared in a parent package, even if the parent package has a
  with clause for the child package in the parent's body.

NF-Q406-016 Improved dimensionality checking for generic units (2017-04-15)

  The dimensionality-checking algorithms have been enhanced to allow
  the construction of generic units that can apply to different
  dimensioned arguments, and verify the dimensional consistency of
  each separate instance of such a unit.

NF-Q405-032 Optimize calls to null procedures (2017-04-16)

  GNAT now replaces calls to null procedures by null statements,
  except when GNATcoverage is active. This enables further
  optimizations that include such calls.

NF-Q321-029 Thread-safe support in GNATCOLL.Memory package (2017-03-23)

  GNATCOLL.Memory package can now be used in multithreaded
  applications.

NF-Q320-028 Relax alignment constraint for record extensions (2017-03-23)

  On x86 and, more generally, architectures that do not require
  strict alignment for memory accesses, the compiler now accepts
  size clauses on record type extensions that effectively lower the
  alignment of the type, if there is also a representation clause on
  the type.

NF-Q309-046 GNAT includes a ZFP runtime for Linux and Windows (2017-03-16)

  The native ZFP (Zero Footprint) runtime for Linux and Windows is
  now part of the base GNAT package. It is now also available with
  64-bit compilers. This runtime is similar to the ZFP runtimes that
  are delivered with our bare metal products and can be used to test
  an embedded project in a native environment.

NF-Q306-018 Efficiency of Trim improved (2017-06-20)

  Ada.Strings.Fixed.Trim is now slightly faster than it was.

NF-Q303-007 Better message on violation of No_Dynamic_Allocation (2017-04-07)

  The Ravenscar profile includes a restriction on dynamic
  allocation. Its violation is usually detected in the back-end,
  with an obscure message that does not refer directly to the entity
  responsible for the dynamic allocation (which is typically a
  discriminated object with non-static discriminants). This
  enhancement adds a source warning to pinpoint more precisely the
  cause of the subsequent error and compiler rejection.

NF-Q228-015 Time_IO.Value enhanced to parse ISO-8861 UTC (2017-04-15)

  The function Value of package GNAT.Calendar.Time_IO has been
  enhanced to parse strings containing UTC date and time with the
  ISO-8861 format.

NF-Q223-044 Option to turn run-time exception warnings to errors (2017-03-13)

  The compiler supports a new switch -gnatwE that treats warnings
  that run-time exceptions will occur as compile-time errors.

NF-Q222-037 Ceiling locking on Linux without root privileges (2017-03-04)

  Ceiling locking on Linux no longer requires root privileges.
  Instead, you can run "sudo /sbin/setcap cap_sys_nice=ep exe_file"
  to set the relevant capability on the executable file, and then
  that program can use ceiling locking without running as root.

NF-Q220-025 Improved access-before-elaboration mechanism (2017-09-18)

  The access-before-elaboration mechanism of the compiler has been
  modified to offer:
  * Improved support for entries, instances, protected subprograms,
  and select statements.
  * New support for assertion aspects and pragmas such as Invariant,
  Pre, and Post, as well as requeue statements.
  * Improved compile-time diagnostics for elaboration issues.
  The section "Elaboration Order Handling in GNAT" of the GNAT User
  Guide has been updated accordingly to reflect these new changes.

NF-Q214-005 Linker used by compiler independent of the path (2017-09-15)

  The compiler used to find the ld.gold and ld.bfd linkers using the
  PATH environment variable. Now, these linkers are located in
  libexec/gcc/$(gcc -dumpmachine)/$(gcc -dumpversion)/, avoiding the
  possibility of picking up the wrong linker.

NF-Q210-031 Warning messages for null-excluding components (2017-02-27)

  Warnings are now issued on composite objects that have components
  of a null-excluding access type that are default initialized to
  null, as such initializations will raise Constraint_Error.

NF-Q206-010 Automatic reordering of components in record types (2017-03-24)

  The compiler can now reorder components in record types with
  convention Ada in order to fix blatant inefficiencies that the
  layout of components in textual order would bring about. The
  reordering is automatic and silent by default, but both
  characteristics can be toggled: pragma No_Component_Reordering
  disables it either on a per-record-type or on a global basis,
  while -gnatw.q gives a warning for each affected component in
  record types.

NF-Q203-052 Elaboration checks for dispatching calls (2017-02-09)

  The compiler now installs access-before-elaboration checks on
  library-level nonabstract primitive operations of tagged types in
  either elaboration mode. A dispatching call which occurs during
  elaboration and targets such a primitive will fail with
  Program_Error if the body of the primitive was not elaborated.

NF-Q201-039 Support of extended interrupts on leon3-elf (2017-02-10)

  The Ravenscar runtimes now support the extended interrupts of the
  interrupt controller. You need to set the Extended_Interrupt_Level
  constant in s-bbbopa.ads and rebuild the runtime, as it is not
  enabled by default.

NF-Q118-013 Better warnings for suspicious postconditions (2017-01-18)

  Postconditions (and consequences of contract cases) that do not
  refer to the post-state of the subprogram are suspicious, as they
  should either be preconditions, or another expression was meant to
  be checked. Originally only full postconditions were checked, now
  all conjuncts in a conjunction of Boolean sub-expressions are
  individually checked for such issues.

NF-Q111-032 Relaxed and strict secondary stack management (2017-01-17)

  The compiler now employs two different schemes of managing the
  secondary stack - relaxed and strict.
  In relaxed mode, a context which uses the secondary stack will no
  longer manage it if there exists an enclosing construct which
  already does that. This behavior cannot propagate beyond packages
  and subprograms. Relaxed mode is the default mode of secondary
  stack management.
  In strict mode, any context which uses the secondary stack will
  manage it unconditionally. This behavior can be enabled by switch
  -gnatd.s.

NF-Q109-016 Do not emit unit version on bare board platforms (2017-01-09)

  On bare board platforms, units versions for Version and
  Body_Version attributes are not emitted anymore when not needed.

NF-Q102-008 No_Inline is a legal aspect name (2017-01-02)

  The GNAT-specific pragma No_Inline is now accepted as a legal
  aspect name, in analogy with the Ada aspect No_Return.

NF-PC07-043 Support of extended interrupts on leon3-elf (2016-12-19)

  The ravenscar runtime can now support extended interrupts on leon3
  targets, like Leon4 or UT700. User needs to edit s-bbbopa.ads to
  set the generated interrupt.

NF-PC07-002 New gnatcheck rule Unchecked_Conversions_As_Actuals (2017-01-28)

  A new rule named Unchecked_Conversions_As_Actuals is added to
  gnatcheck. It flags a call to an instantiation of
  Ada.Unchecked_Conversion used as an actual in procedure or entry
  call or given as a default value in a subprogram or entry
  parameter specification.

NF-PC02-018 New rule Enumeration_Representation_Clauses (2017-01-28)

  A new rule named Enumeration_Representation_Clauses is added to
  gnatcheck. It flags enumeration representation clauses.

NF-PC02-016 New gnatcheck rule POS_On_Enumeration_Types (2017-01-28)

  A new rule named POS_On_Enumeration_Types is added to gnatcheck.
  It flags the 'Pos attribute in cases where the attribute prefix
  denotes an enumeration type (including types derived from
  enumeration types).

NF-PC01-056 New gnatcheck rule Unchecked_Address_Conversions (2017-01-28)

  A new rule named Unchecked_Address_Conversions is added to
  gnatcheck. It flags instantiations of Ada.Unchecked_Conversion
  where the actual for the formal type Source is the System.Address
  type (or a type derived from it), and the actual for the formal
  type Target is an access type.

NF-PC01-003 New gnatcheck rule Fixed_Equality_Checks (2017-01-28)

  A new rule named Fixed_Equality_Checks is added to gnatcheck. It
  flags all calls to the predefined equality operations for fixed-
  point types.

NF-PB30-046 Constraint checks removed from tagged membership (2016-12-01)

  The compiler was generating unnecessary run-time checks (i.e.
  checks that cannot fail) for expressions like "X in T'Class". The
  same was true of type conversions like "T'Class (X)". These checks
  are now removed.

NF-PB30-038 New gnatcheck rule Null_Paths (2017-01-28)

  A new rule named Null_Paths is added to gnatcheck. It flags a
  statement sequence that is a component of an if, case, or loop
  statement when this sequence consists entirely of null statements.

NF-PB30-037 New gnatcheck rule Binary_Case_Statements (2017-01-28)

  A new rule named Binary_Case_Statements is added to gnatcheck. It
  flags a case statement if this statement has only two
  alternatives, one containing exactly one choice, and the other
  containing exactly one choice or the OTHERS choice.

NF-PB29-035 New gnatcheck rule Nested_Subprograms (2017-01-28)

  A new rule named Nested_Subprograms is added to gnatcheck. It
  flags any subprogram declaration, subprogram body declaration,
  subprogram instantiation, expression function declaration, or
  subprogram body stub that is not a completion of another
  subprogram declaration and that is declared within a subprogram
  body (including bodies of generic subprograms), task body, or
  entry body directly or indirectly (that is, possibly within a
  local nested package).

NF-PB29-029 New gnatcheck rule Uninitialized_Global_Variables (2017-01-28)

  A new rule named Uninitialized_Global_Variables is added to
  gnatcheck. It flags object declarations located immediately within
  a package declaration, a generic package declaration, or a package
  body, when they do not have explicit initializations.

NF-PB29-023 New gnatcheck rule Objects_Of_Anonymous_Types (2017-01-28)

  A new rule named Objects_Of_Anonymous_Types is added to gnatcheck.
  It flags any object declaration located immediately within a
  package declaration or a package body (including generic packages)
  when the object declaration has an anonymous access or array type
  definition.

NF-PB28-029 New rule Default_Values_For_Record_Components (2017-01-28)

  A new rule named Default_Values_For_Record_Components is added to
  gnatcheck. It flags record component declarations that have
  default expressions.

NF-PB28-025 New gnatcheck rule Deriving_From_Predefined_Type (2017-01-28)

  A new rule named Deriving_From_Predefined_Type is added to
  gnatcheck. It flags a derived type declaration when the ultimate
  ancestor type is a predefined Ada type.

NF-PB28-024 New parameter for Identifier_Suffixes gnatcheck rule (2017-01-27)

  A new parameter Access_Obj_Suffix is added to the gnatcheck
  Identifier_Suffixes rule. It allows specifying suffixes for
  objects of access types to be checked.

NF-PB23-021 Removal of restriction on Scalar_Storage_Order usage (2017-02-22)

  The restriction whereby a record type cannot contain a component
  whose type is a bit-packed array and which has a different scalar
  storage order from the record type has been removed.

NF-PB15-032 More compact code for concatenation at library level (2016-11-17)

  The compiler generates more compact code for concatenation
  operations performed on strings within the initialization
  expression of an object declared at library level.

NF-PB10-003 Specifying an address clause on controlled objects (2016-11-16)

  It is now possible to specify an address clause on objects which
  are either derived from Ada.Finalization.Controlled or
  Limited_Controlled, or contain controlled components.

NF-PB09-035 More efficient trigonometric functions on x86 (2016-11-11)

  The implementation of the sin, cos, and tan functions in children
  of Ada.Numerics is now more efficient on the x86 architecture.

NF-PB09-032 Static intialization with pragma Linker_Section (2016-11-17)

  If an array object has a pragma Linker_Section with a compile-
  time-known initial value, the object is statically initialized in
  place in the appropriate section, as opposed to being initialized
  by elaboration code at run time.

NF-PB08-054 Non-blocking wait for child process termination (2016-11-28)

  A new procedure Non_Blocking_Wait_Process is added to GNAT.OS_Lib.
  It is the same as Wait_Process, except that if there are no
  completed child processes, it returns immediately without
  blocking.

NF-PA28-010 Reduced -Wstack-usage false positives with strings (2017-01-13)

  The number of false positives reported by the compiler for the
  -Wstack-usage warning on strings or arrays has been reduced.

NF-PA26-062 Better RM 6.3.1 (8-13) rules violation error message (2016-10-24)

  RM 6.3.1 (8) specifies that an inherited primitive of a type
  derived from a generic formal with unknown discriminants has
  convention intrinsic. As a result, access subprogram parameters of
  such an operation are also intrinsic, and the corresponding actual
  cannot be an access attribute reference. The new error message
  warns on the inherited subprogram before rejecting the attribute
  reference.

NF-PA20-009 Minimize useless body compilations when inlining (2016-10-25)

  A filter has been added to the inlining / instantiation circuitry
  to recognize package bodies that do not contain bodies of inlined
  functions or generic bodies being instantiated, and that therefore
  do not need to be compiled, even though their declarations may
  appear in the context of other units that are needed for inlining.

NF-PA18-029 New tool translating addresses into source locations (2017-11-28)

  A new tool called gnatsymbolize is now available on native
  platforms. This tool translates addresses into their corresponding
  filename, line number, and function names. Its functionality is
  similar to addr2line, but it has been designed to require fewer of
  the DWARF sections to be present in the executable.

NF-PA18-022 Elimination of out-of-line body with Inline_Always (2017-04-06)

  The compiler now always eliminates the out-of-line body of a
  subprogram subject to pragma Inline_Always.

NF-PA07-083 New warning for ineffective use clauses (2017-08-30)

  Compiler's support for detecting unused entities (-gnatwu) has
  been extended to properly identify useless or "ineffective" use-
  type and use-package clauses.

NF-PA07-078 AI12-0127 implementation, partial aggregate notation (2016-10-12)

  Ada Issue AI12-0127, part of the Ada2012 amendment, describes a
  new constructor for aggregates, in terms of an existing record or
  array object, and a series of component-wise modifications of its
  value, given by named associations for the modified components. To
  use this feature the compilation flag -gnat2020 must be specified.

NF-P921-043 AI12-0125, left-hand side of assignment abbreviation (2016-11-11)

  Ada Issue AI12-0125, part of the Ada2012 amendment, introduces the
  use of the character '@' as an abbreviation for the left-hand side
  of an assignment statement, usable anywhere within the expression
  on the right-hand side. To use this feature the compilation flag
  -gnat2020 must be specified. See motivation and examples of use at
  http://www.ada-auth.org/cgi-
  bin/cvsweb.cgi/ai12s/ai12-0125-3.txt?rev=1.12 .

NF-P909-008 Improved debug information for enumeration types (2017-01-03)

  In its DWARF output, GNAT now generates DW_AT_encoding attributes
  for all DW_TAG_enumeration_type DIEs. These describe the
  signedness of the corresponding enumeration types, allowing
  precise interpretation of subranges.

NF-P722-026 Class-wide type invariant optimization (2016-12-12)

  Subprogram calls within class-wide type invariant expressions now
  get resolved as primitive operations instead of being dynamically
  dispatched.

NF-P718-007 gnatpp: Improved formatting with --par_threshold=0 (2016-10-14)

  If --par_threshold=0 is specified, and --no-separate-is is not
  specified, then the "is" of a parameterless procedure is placed on
  a separate line.

NF-P715-005 New fixed-sized secondary stack allocation scheme (2017-09-26)

  Fixed-sized secondary stacks are used by bareboard and ravenscar-
  cert runtimes, and are an option for other targets. They are now
  allocated separately from the primary stack and their default size
  is now specifiable at bind time via the gnatbind switch -D.
  Separating the primary and secondary stacks simplifies the sizing
  and management of the two different stacks for bareboard and
  ravenscar-cert users.
  Existing users on bareboard targets who have specified per-task
  stack sizes may need to reduce these sizes as a result of the
  secondary stack no longer being allocated from the primary stack.
  For ZFP run-time users who provide their own implementation of
  __gnat_get_secondary_stack, please note that you will need to
  update your solution. Refer to the run-time source file
  s-secsta__zfp.adb for more details.

NF-P629-041 New pragma No_Heap_Finalization (2016-11-07)

  This pragma may be used as a configuration pragma or as a type-
  specific pragma. In its type-specific form, the argument of the
  pragma must denote a library-level named access-to-object type.
  The pragma suppresses calls to Finalize for heap-allocated objects
  created through the argument type in cases where the designated
  type requires finalization actions.

NF-P624-023 Improved performance of symbolic traceback (2017-06-27)

  The run-time performance of symbolic traceback is improved by: 1)
  direct mapping of files into memory instead of reading, 2) more
  efficient search, and 3) caching of exception information.

NF-OC07-029 Debug information for imported entities (2017-05-24)

  GCC now produces debug information to describe Ada entities that
  are imported using the Import pragma or aspect.

NF-OB10-033 The Linux monotonic clock implementation is improved (2017-11-21)

  The Posix method of calculating absolute deadlines is adopted in
  favor of latching the monotonic clock to a known epoch, as the
  Posix method is simpler and meets all the requirements of the Ada
  LRM.

NF-O612-032 Ability to check removal of Ghost code in object (2017-01-20)

  The names of Ghost entities in the objects and executables are now
  uniquely prefixed with "___ghost_" (three leading underscores).
  This makes it possible to independently check the removal of Ghost
  code by the compiler when generating the final executable with
  Ghost assertion policy of Ignore (the default).

NF-O611-016 Prebuilt version of XMLAda in GNAT Pro for VxWorks (2017-09-01)

  It is no longer necessary to build XMLAda from sources in order to
  use this add-on, as it now comes prebuilt in GNAT Pro for all
  VxWorks platforms.

NF-K719-015 Symbolic tracebacks without hexadecimal addresses (2017-06-18)

  New functions Symbolic_Traceback_No_Hex are added to
  System.Traceback.Symbolic to avoid printing hexadecimal addresses.
  This is useful for getting deterministic output from tests.

NF-K405-019 Improved elaboration checks in complex code (2017-02-06)

  The compiler now generates access-before-elaboration checks for
  subprogram calls occurring within complex code such as the
  branches of a conditional.

NF-I828-008 Support aliases when defining user command in gdb (2017-02-13)

  When defining a user command in gdb with the command "define",
  abbreviations (e.g. "command" for "commands") are now fully
  supported.
