======================================================
GNAT 3.15 NEW FEATURES LIST Current as of Oct 28, 2002
======================================================

Copyright (c) 2001-2002, Ada Core Technologies

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

NF-315-9727-002 More uniform format for Exception_Information

  The end of line sequence for the Exception_Information string
  is now a single line feed character (16#0A#) rather than a
  CR/LF sequence. This is more consistent with the canonical
  form of Text_IO files, and more convenient on most targets.

NF-315-9726-002 Better message for body for imported subprogram

  If a body is incorrectly supplied for an imported subprogram,
  the error message (which used to say simply duplicate body)
  now points out specifically that a body cannot be supplied
  for an imported subprogram.

NF-315-9722-020 Style_Checks pragma takes effect immediately

  The style check pragma takes effect immediately after the
  semicolon (it used to be slightly delayed). This means for
  example that a Style_Checks (Off); pragma may have spaces
  at the end of the line without generating an error.

NF-315-9718-005 Florist is no longer using ATC constructs

  Florist is no longer using the "asynchronous transfer of
  statement" Ada 95 constructs, which means in particular that
  applications taking advantage of the pragma Restrictions
  can be compiled using Florist.

NF-315-9716-013 ASIS asistant now checks name duplication

  The ASIS utility Asistant used to silently hide the
  built-in queries if the variable with the same name was
  created. It now gives the error message in this case.

NF-315-9714-020 Combining of -gnatc/-gnats switches

  The switches -gnatc and -gnats can be combined with other
  switches providing that the c or s comes first. A violation
  of this rule is now diagnosed as a fatal error.

NF-315-9712-001 More information for exceptions

  In most cases, Constraint_Error, Program_Error and
  Storage_Error exceptions include not only the file name
  and line where the exception was issued, but also a
  short message describing the cause of the exception,
  for example "accessibility check failed".

NF-315-9711-008 Better default alignment of small records

  Records that are known to have a size of 2,4, or 8 bytes,
  either as a result of an explicit size clause, or the use
  of a full record representation clause, are by default
  given a corresponding alignment (e.g. a record of length
  4 is given an alignment of 4). This results in much more
  efficient code, and also allows such types to be specified
  as atomic. If the previous behavior of defaulting to an
  alignment of 1 is desired, an explicit alignment clause
  can be given for the record type.

NF-315-9710-017 Large aggregates treated as static

  If pragma Restrictions (No_Elaboration_Code) is specified,
  then large static aggregates up to 16 million items long
  can be treated statically. The common case where this
  arises is when there is an others clause covering a very
  large number of elements.

NF-315-9709-022 Latin-9 character set now supported

  Latin-9 (ISO-8859-9) is a minor modification of Latin-1 that
  excludes certain less frequently used special characters,
  and introduces the Euro symbol, and some important national
  letter characters. GNAT now supports the use of Latin-9 in
  identifiers (with the option -gnati9) and also provides the
  packages Ada.Characters.Latin_9 (a-chlat9.ads) and the
  corresponding Ada.Characters.Wide_Latin_9 (a-cwila9.ads)
  to define the Latin-9 codes.

NF-315-9708-006 Interfaces.C_Streams is now preelaborable

  The package Interfaces.C_Streams has been reimplemented to
  include the specification of pragma Preelaborate, allowing
  it to be with'ed from other preelaborable packages. There
  is no change in the visible interface, other than this
  categorization status change.

NF-315-9707-001 New procedure GNAT.Expect.Close

  It is now possible to retrieve the exit status of the process
  when using GNAT.Expect.Close.

NF-315-9705-001 SGI debug format now consistent

  The debug formats for external names in the SGI ports are
  now consistent with those used in all other ports. Previously
  there were some inconsistencies (e.g. the use of dots in
  names instead of double underscores), for the benefit of
  the Workshop debugger. This change should make the use of
  gdb more reliable on the SGI IRIX targets.

NF-315-9703-005 Initialize_Scalars does not affect warnings

  The initializations generated by Initialize_Scalars, and also
  the implicit initialization of packed arrays in some cases, no
  longer count as initializations for the purposes of generating
  warnings about use of uninitialized values or variables that
  are never initialized. This means that more useful warnings
  are generated in these cases.

NF-315-9703-004 New warnings for unreferenced entities

  The -gnatwu switch now activates additional warnings for
  some cases that were missed before. First, the occurrence of
  a subprogram body where there is a separate subprogram spec
  is no longer considered to be a reference, so if this is the
  only reference, a warning will be generated. Second, entities
  in package bodies that are not referenced within the package
  body (and therefore not referenced anywhere, since package
  body entities are not visible outside) are now flagged.

NF-315-9630-002 New pragma Unreferenced

  The pragma Unreferenced, which takes one or more local names
  of entities as parameters, specifies that these entities are
  deliberately unreferenced. Warnings in -gnatwu/-gnatwf mode
  will be suppressed, but a warning will be generated if one
  of these entities is actually referenced.

NF-315-9627-001 All files compiled by gnatmake when -k is used

  When -k is used and there are several files to compile,
  gnatmake will now attempt to compile all the files. However
  after the first compilation failure, no binding or linking
  will be attempted.

NF-315-9626-003 Clearer generated output for qualified expr

  In some cases of code generated by the compiler, qualified
  expressions were generated but the -gnatD/G output did not
  parenthesize the expression leading to confusing output.

NF-315-9626-002 Glide now supports .gpr project files

  Glide will automatically recognize and process the new .gpr
  project files that are used by GNAT.

NF-315-9619-015 False constant condition warnings suppressed

  If a conditional test involves an operand for which warnings
  have been suppressed (using pragma Warnings Off), then the
  compiler will suppress constant conditional warnings for the
  conditional test (when -gnatwc specified).

NF-315-9617-005 All files read by gnatmake when -k is used

  When -k is used, even if the compilation is bad, gnatmake
  attempts to read the ALI file, if it exists, so that more
  compilations may be attempted. This is specially useful when
  -gnatQ is used, because most of the times, the withed
  units will be correctly put in the ALI file.

NF-315-9614-006 Ada.Text_IO.Get_Immediate on VxWorks

  On VxWorks, Get_Immediate used without the Available parameter
  doesn't need to wait for a CR/LF to return any more (we now
  follow the RM implementation advice, see A.10.7(24)).

NF-315-9606-001 Linker_Options handled for package body/spec

  The ALI file now contains separate sections for the package
  body and spec for Linker_Options. The result is that the
  binder can do a better job of ordering these (options for
  the body appear before options for the spec)

NF-315-9604-016 Optimization of constant array references

  If a constant array is decleared and initialized with an
  aggregate with constant values, then a subscripted reference
  to this array using a compile time known subscript is now
  recognized to be compile time known. This improves the code
  quality in a number of situations.

NF-315-9604-015 GNATDLL can change DLL default base address

  A new GNATDLL switch (-b) can be used to change the default
  base address of a relocatable DLL.

NF-315-9603-018 Linker_Options order is preserved

  The binder now guarantees that Linker_Options that appear
  with in a given unit appear in exactly the same sequence
  in the arguments presented to the linker. This removes the
  need for multiple arguments for Linker_Options, and GNAT
  no longer allows such multiple arguments (this was not a
  strictly conforming feature in any case).

NF-315-9602-001 Specifying GNAT parser executable for gnatchop

  A new switch --GCC=xxxx, where xxxx is the path of the GNAT
  parser executable (defaulted to "gcc") allows selection of
  an executable different from the first one on the path.

NF-315-9528-002 Foreign threads for Linux threads

   In the Linux version using the posix threads based
   run time (rts-native), foreign threads (those created
   outside Ada) are now recognized automatically and converted
   to Ada tasks for proper treatment by the Ada runtime.

NF-315-9524-002 OS_Exit and OS_Abort marked No_Return

  The procedures OS_Exit and OS_Abort in GNAT.OS_Lib are now
  marked No_Return, avoiding the need for fiddling to suppress
  warnings when these calls appear as the last action of a
  function, and improving code in some cases.

NF-315-9524-001 New tool gnatname for arbitrary naming schemes

  A new GNAT tool "gnatname" deals with arbitrary naming
  schemes. Given a set of directories and a set of name
  patterns, gnatname either produces a configuration pragmas
  file or updates or creates a project file. All the files
  in the specified directories whose names follow at least
  one of the name patterns and that contains an Ada compilation
  unit can then be compiled.

NF-315-9521-008 New '=' suffix for by GNAT.Command_Line.Getopt

  With this suffix, Getopt in GNAT.Command_Line can now handle
  switches with parameters of the form "switch=xxxx" or 
  "switch xxx".

NF-315-9519-013 mkdir and sp no longer needed under VxWorks

  The symbol sp is no longer required by the GNAT run time
  under VxWorks, and the symbol mkdir is now only linked
  when needed, which means that it is easier to build smaller
  kernels for use with GNAT. See also NF-315-9519-004 below.

NF-315-9519-004 taskInfoGet no longer needed under VxWorks

  The symbol taskInfoGet is no longer required by the GNAT
  run time under VxWorks, which means in particular that it is
  easier to build small kernels for use with GNAT. See also
  NF-315-9519-013 above.

NF-315-9517-003 New restrictions identifier, No_Tasking

  A new restrictions identifier No_Tasking is available. This
  is similar but more convenient than Max_Tasks => 0, and has
  the advantage that it is treated at compile time like all
  other simple restrictions. This restriction is required to
  be consistent for a partition (i.e. if any unit that is in
  the partition has this restriction, no tasking is allowed
  in any other unit in the partition).

NF-315-9512-012 Alternate method for cross-references in Glide

  A new variable ada-xref-search-with-egrep has been added to
  Glide, to control the secondary cross-referencing method based
  on egrep.

NF-315-9507-005 New restrictions identifier, No_Secondary_Stack

  A new restrictions identifier No_Secondary_Stack is now
  available. This restriction ensures at compile-time that no
  reference to the secondary stack (System.Secondary_Stack) is
  made, and generates an error instead. The secondary stack is
  used for returning unconstrained objects.

NF-315-9505-009 HI-E supports returning unconstrained objects

  The High Integrity Edition now supports functions returning
  unconstrained objects such as arrays of variant records.

NF-315-9501-009 Representation information output to file

  If the -gnatR switch is followed by s (e.g. -gnatR3s), then
  the representation information is output to a file with
  file name file.rep (file_REP on VMS) where file is the name
  of the corresponding source file.

NF-315-9431-003 Import (Intrinsic) allowed for all operators

  The specification of pragma Import (Intrinsic) previously
  was permitted only for the four basic operators + - * /.
  It can now be used for all numeric operators defined in
  package Standard.

NF-315-9425-014 Improved performance for source file look up

  A new feature avoids unnecessary repeated searches for source
  files when using gnatmake with a project file. This is done
  using a mapping file to remember the mapping from unit names
  to file names and file names to path names.

NF-315-9423-016 Specified addresses have alignment validation

  If an address is specified for an object that is not
  consistent with the alignment of the object, then various
  unpleasant consequences can arise. A check (either at compile
  time or runtime, depending on the value) is now made to
  detect this particular case of a program being erroneous,
  and Program_Error is raised if an inconsistency is detected.
  The run-time check is suppressed if pragma Restrictions
  (No_Elaboration_Code) is in effect or if range checks are
  suppressed.

NF-315-9423-009 Latin-5 (Cyrillic) now allowed in identifiers

  A new switch (-gnati5) specifies that Latin-5 (Cyrillic)
  characters may be used in identifiers. Thanks to Vadim
  Godunko for contributing the ISO tables in appropriately
  formatted form.

NF-315-9421-002 GNAT.Regexp no longer with's Ada.Text_IO

  The GNAT.Regexp package no longer with's Ada.Text_IO, saving
  space (since this was only used for debugging purposes), and
  making it possible to use this package when the Ada.Text_IO
  package is not available.

NF-315-9420-003 New switches -b and -l for gnatmake

  Two new switches are implemented for gnatmake: -b for bind
  only and -l for link only, which along with the existing
  switch -c allow the use of gnatmake for controlling all
  compile, bind, and link steps. In VMS the form of the
  the qualifier is ACTIONS=(COMPILE,BIND,LINK).

NF-315-9420-002 More cautious handling of Address parameters

  In a pure package, a subprogram with at least one argument
  of type System.Address or a type derived from it, is no
  longer considered pure by default. This affects only code
  generation (disconnecting a possible optimization); it does
  not affect legality of any program. The reason for this
  change is that we have seen cases where such parameters were
  logically being used as pointers, and the result of assuming
  that such functions were pure were unexpected results (even
  though such results were allowed by the RM). To override
  this default assumption, pragma Pure_Function can be used
  to force a function to be considered Pure.

NF-315-9419-006 New type String_List added to GNAT.OS_Lib

  Definition of a type for an often-used data structure, array
  of String_Access type located in the same package.

NF-315-9416-005 Debug file is always in object directory

  When invoked with -gnatD the compiler will always put the
  .dg (_dg on VMS) file in the same directory as the object
  file. This directory may not be the current working
  directory, if a -o switch is used.

NF-315-9412-011 New switch -g for gnatdll

  The -g switch is now supported by gnatdll to build a DLL with
  full debugging information. This is needed to debug the DLL
  or to be able to retreive the DLL post mortem stack tracebeck
  using the addr2line tool.

NF-315-9410-007 Improved control over elaboration order

  The pragma Suppress (Elaboration_Checks) when used as a
  global configuration pragma is now guaranteed to suppress
  all elaboration checks. This means that it is much safer
  and clearer to use -gnatE and this pragma to suppress
  checks in the case where the elaboration is known to be
  safe (rather than the old gnatbind -f switch, which has
  been undocumented. It is still implemented but generates
  a warning whenever it is used).

NF-315-9409-006 Better code for Address_To_Access_Conversions

  The functins To_Pointer and To_Address are now always
  inlined if either front end inlining or back end
  optimization is specified, resulting in more efficient
  code for these operations.

NF-315-9404-005 Document GDB treatment of function epilog

  Since there is only one copy of the epilog of a function
  and it has to be generated with some specific line number,
  you sometimes see a strange jump to the epilog when using
  the GDB next command. There is now a special section in
  the users guide describing this behavior.

NF-315-9402-007 Meaningful names for tasks from allocators

  If an assignment statement has an allocator for a task on
  the right hand side, and the left side is a simple array
  reference, or a simple selected component reference, then
  a meaningful image name for the resulting task is built
  using the appropriate subscript value or field name.

NF-315-9329-002 New warnings on unreferenced formals

  The new warning switch -gnatwf causes warnings to be output
  for cases of formal parameters which are not referenced in
  the subprogram body. This warning is also turned on by using
  the -gnatwu switch. Note that -gnatwuF will cause warnings
  to be output for unused entities other than formals, and
  may be used to approximate the previous behavior of -gnatwu.
  To suppress a specific instance of such a warning, you can
  use the new pragma Unreferenced (see entry for 9630-002)
  or you can use pragma Warnings (Off, formal-name).

NF-315-9324-016 New documentation of Storage_Size attribute

  A new section has been added to the GNAT reference manual
  describing the handling of the Storage_Size attribute. In
  particular, the special handling of zero sized dummy storage
  pools is now described (the feature of special efficient
  handling of such pools has been there for some time, but
  has not been explicitly documented).

NF-315-9319-019 Improved control over validity checking

  The -gnatV switch now takes a string of letters that specify
  exactly where additional validity checks should be performed.
  The possibilities are both far more extensive, and also can
  be controlled much more precisely. In addition a new pragma
  Validity_Checking can be used to control the validity
  checking at the source program level. Used with the new
  Initialize_Scalars pragma, this new feature provides a
  powerful technique for finding uninitialized variables and
  other sources of invalid values.

NF-315-9319-008 PPC VxWorks runtime built with -mlongcall

  The GNAT run time is now built with -mlongcall by default on
  PowerPC VxWorks, to get around the limit of 32 megs of memory
  on this configuration more easily. The compiler option
  -mlongcall is still required on user's code.

NF-315-9314-005 Ada.Text_IO.Get_Immediate on VxWorks

   On VxWorks, Get_Immediate used with the Available parameter 
   isn't blocked any more. But before calling Get_Immediate, a
   call to Interfaces.VxWorks.IO.Enable_Get_Immediate is
   required.

NF-315-9311-003 Foreign threads for HP-UX 11 pthread

   In the HP-UX 11 version using the posix threads based
   run time (rts-pthread), foreign threads (those created
   outside Ada) are now recognized automatically and converted
   to Ada tasks for proper treatment by the Ada runtime.

NF-315-9308-001 New package GNAT.CRC32

   This package implements the CRC-32 algorithm. This computes
   a 32-bit checksum from either character or stream element
   data. This checksum is the one used by Ethernet and FDDI.

NF-315-9307-003 Enhanced Project facility

  The new Project Manager allows configuring various properties
  of a collection of source files, the directories (containing
  the sources, outputs, and executables), switch settings, main
  unit files, programming languages (currently Ada and/or C),
  and source file naming conventions.  Settings are defined in
  project files.  Projects can be interrelated in several ways.
  A project can import other projects containing needed source
  files. Alternatively, a child project can extend a parent
  project, inheriting the parent's source files and overriding
  any of them with alternative versions. This new facility is
  documented in the new version of the GNAT user's guide.

NF-315-9306-002 GNAT.IO output to standard error

   It is now possible to write output to standard error using 
   the GNAT.IO package (additional routines to specify the
   current file to be Standard_Output or Standard_Error added)

NF-315-9305-004 New constant in GNAT.Regpat

   Never_Match is a special pre-compiled regular expression
   that never matches anything.

NF-315-9303-012 Specifying the default runtime location

  A new switch --RTS=xxxx, where xxxx is the new default 
  runtime location, is now recognized by gnatmake, gnatbind,
  gnatls, gcc, gnatfind and gnatxref.

NF-315-9303-006 Solaris no longer needs -funwind-tables

   It is no longer necessary to use the -funwind-tables switch
   under Solaris to get call chains at run time (using the -E
   gnatbind switch, or GNAT.Traceback).

NF-315-9231-014 Foreign threads for Sparc Solaris rts-pthread

   In the Sparc Solaris version using the posix threads based
   run time (rts-pthread), foreign threads (those created
   outside Ada) are now recognized automatically and converted
   to Ada tasks for proper treatment by the Ada runtime.

NF-315-9231-007 New warning for false assertion

   If an assert statement is known to be false at compile time
   and the test is other than an explicit False, then a warning
   is generated if assertions are enabled.

NF-315-9231-001 Using gnatmake with a project file and no main

   It is now possible to invoke gnatmake with a project file
   and no main program. The project file can then specify the
   main program, or arrange to compile a specified set of
   files. See the GNAT Project Facility Guide for further
   details.

NF-315-9230-004 New VxWorks tasking run time

   A new low level tasking run time has been written for
   VxWorks targets that provides a lighter implementation
   that is more efficient.

NF-315-9230-002 Conditional warnings removed in assertions

   Warnings generated by the -gnatwc (warn on conditional tests
   whose outcome is known at compile time) is now suppressed if
   the test occurs in a pragma Assert (since in this context
   such tests are reasonable).

NF-315-9229-003 Redundant checks removed by front end

   The front end of the compiler now removes redundant checks
   against the bounds of the relevant subtype. This reduces
   compile time, and can significantly affect the size of the
   generated code in -O0 mode, particularly if -gnatVe is used.
   Note that this transformation may change the effect of some
   incorrect programs containing operations on invalid values.

NF-315-9228-012 Using gnatmake with several main programs

   It is now possible to invoke gnatmake with a list of more
   than one main program. This is similar in effect to invoking
   gnatmake multiple times, once for each main program.

NF-315-9217-016 Better warning for := in place of =>

   The error of using := where => is required for named
   parameters in procedure calls is now specifically diagnosed
   in a clear manner.

NF-315-9213-005 Better error message for missing pragma Pack

  A common error is to assume that a Size clause can be used
  to force implicit packing (and some Ada 83 compilers allowed
  this), but in accordance with recommendations in the RM,
  GNAT requires an explicit pragma Pack, and now an error
  message specifically noting the need for an explicit Pack
  is output.

NF-315-9209-001 Warning on null range for fixed-point

  There is no obvious useful application for a fixed point
  type declaration with a null range (high bound less than low
  bound), so a warning is now given for such declarations.

NF-315-9206-004 Eliminate pragma can now specify homonym number

  A new optional parameter Homonym_Number is implemented for
  the Eliminate pragma, making it easier to specify that some
  but not all of the instances of an overloaded subprogram are
  to be eliminated. This is primarily for the use of gnatelim
  but the pragma can be used in application programs.

NF-315-9202-002 Better control over memory allocation routines

  To implement dynamic memory allocation and deallocation, GNAT
  now provides an Ada package (System.Memory) that you can 
  modify and recompile to change the implementation of the
  default storage pool (e.g for adding memory instrumentation).

NF-315-9201-012 New pragma External (synonym for pragma Export)

  Some versions of the VADS Ada 83 compiler permitted pragma
  External to mean the same thing as pragma Export in Ada 95.
  GNAT now recognizes pragma External as equivalent to pragma
  Export to make it easier to port legacy code using this
  pragma to externalize Ada subprograms.

NF-315-9201-008 New routines in table packages.

  Three new routines have been added in GNAT.Dynamic_Tables and
  GNAT.Table. Free completly frees the table by releasing all
  associated memory. Set_Item puts an item into the table at
  a specific location, expanding the table if the index is
  outside the current upper bound. Append adds an entry at
  the end of the table.

NF-315-9127-004 Better handling of duplicate end line semicolon

  If an end line has an extra semicolon, then this is now
  cleanly diagnosed as an extra semicolon. Previously the
  error recovery was not clean in this situation.

NF-315-9121-003 File_Time_Stamp can get a directory time stamp

  Using GNAT.OS_Lib.File_Time_Stamp it is now possible to get
  the time stamp for a directory. This routine used to support
  only files.

NF-315-9120-006 Better warnings on unused with_clauses

  If the only mention of a context unit is in a renaming
  declaration in the visible part of a package, do not suggest
  that the with_clause can be moved to the body.

NF-315-9108-001 Registry is not searched on NT with -nostdinc 

  Under Windows if flags -nostdinc is passed to gnatmake, the
  default libraries set into the registry will not be used.

NF-315-9015-002 Invalid initial values for Boolean

  Unsigned integers and enumeration types are now initialized
  with out of range values in all possible cases for
  Normalize_Scalars or using the new Initialize_Scalars pragma.
  In particular, Boolean values stored in more than one bit are
  now initialized with out of range values.

NF-315-9014-007 Specifying a configuration pragmas file

  It is now possible, using new switch -gnatec, to provide a
  file containing configuration pragmas. Unlike the standard
  gnat.adc file, this file does not have to be in the current
  directory, providing more flexibility.

NF-315-9113-007 Package System is more accessible

  There is now a specialized package system for each target,
  which contains the values as plain easily readable constants.
  This obviates the need for the gnatpsys utility (GNAT SYSTEM
  for VMS), which did not work anyway in cross environments,
  and also obviates the need for the Standard attributes Tick,
  Max_Priority, and Max_Interrupt_Priority (to replace these,
  just use the corresponding constants in package System).

NF-315-9012-011 Better msg for calling generic procedure

  If a procedure call attempts to call a generic procedure
  without first instantiating the procedure, the error message
  is specialized to clearly indicate this particular error.

NF-315-8930-005 Glide and Gvd in Tornado integration improved

  Glide and Gvd can now be launched in the current project
  directory.

NF-315-8928-003 Add many routines in GNAT.Directory_Operations

  GNAT.Directory_Operations has been enhanced with many
  routines. One to remove a directory, routines to extract
  part of a pathname (base name, extension, file name), and
  two powerful directory iterators.

NF-315-8927-001 Compile is more robust when using -gnatQ

  The -gnatQ switch which forces the compiler to do full
  semantic analysis and generate an ali file is now much
  more robust, and very seldom causes the compiler to fall
  down, so it can be used routinely. This is useful with
  tools (such as GLIDE) which use the ali file for browsing
  purposes, since it allows browsing of incorrect and
  incomplete files.

NF-315-8923-013 Unreserve_All_Interrupts for signal core dumps

  For all targets except OpenVMS, Win32, VxWorks, OS/2 and
  RT-Linux, pragma Unreserve_All_Interrupts now disconnects
  the signals SIGILL, SIGBUS and SIGSEGV from the GNAT runtime
  mapping to exceptions.  This causes the signal to propagate
  to the default OS handler, resulting in a core dump for
  further analysis.

NF-315-8922-002 GNAT.Sockets for VxWorks

  GNAT.Sockets is now fully supported on all VxWorks ports.

NF-315-8915-002 Support for POSIX Threads on Lynx 3.1.0a

  The GNAT Ada runtime now uses the the new Posix 1.c threads
  API, provided by LynxOS as of version 3.1.0. This work also
  adds support for foreign threads, allowing Posix threads to 
  coexist with Ada tasks.

NF-315-8914-009 Clearer message for null for access parameter

  If null is explicitly passed as an argument for an access
  parameter, the new error message explicitly identifies this
  condition.

NF-315-8902-011 New pragma Link_With for Ada 83 compatibility

  A new pragma Link_With has been implemented for compatibility
  with certain Ada 83 compilers. The effect is the same as that
  of pragma Linker_Options, except that spaces are treated as
  separators between separate arguments.

NF-315-8902-011 New warning for suspicious Bit_Order usage

  If a non-standard Bit_Order is specified, then the byte in
  which a given field is placed is never affected. However,
  if the first bit is greater than 7 it easily creates the
  confusing impression that it might be affected. The compiler
  now generates a warning if a non-standard Bit_Order is used
  and a first bit value is not less than the storage unit size.

NF-315-8902-009 Finer grained locking for file open

  The task locking for opening files is now much finer grained,
  and in particular, the actual open itself no longer is done
  with a lock held. This considerably improves opportunities
  for parallelism between tasks in environments (e.g. networked
  situations) where file opens can take a long time.

NF-315-8823-008 pragma CPP_Destructor is removed

  This pragma has never been implemented in GNAT, so we are now
  removing it. It is possible that it might be implemented in
  some future version, but there is no point in having a pragma
  around that is not implemented.

NF-315-8823-006 warning on null loop ranges

  A warning is now generated for a loop range that is known to
  be null at compile time, and for suspicious reverse loops
  whose upper range is an explicit zero or one.

NF-315-8822-001 New Ada.Synchronous_Task_Control on VxWorks

  Synchronous_Task_Control has been reimplemented using VxWorks
  binary semaphores for better efficiency.  This also allows
  the use of the package facilities within direct-vectored
  hardware interrupt handlers to synchronize with Ada tasks.

NF-315-8820-014 New pragma Initialize_Scalars

  A new pragma Initialize_Scalars has been implemented. This is
  similar in concept to Normalize_Scalars, with two important
  extra capabilities. First there is no requirement that this
  pragma be used on all units in a partition consistently, so
  it can be used on selected application units to cause the
  initialization of otherwise uninitialized data. Second the
  actual values used for initialization can be controlled at
  bind time without needing to recompile, allowing repeated
  testing with different values for uninitialized data.

NF-315-8729-005 More detailed warnings on unchecked conversion

  For the case of unchecked conversions where the size of the
  source is different from the size of the target, new more
  detailed warnings are output if the -gnatf flag is used. For
  example "16 trailing bits of source will be ignored".

NF-315-8728-015 BOOL type in Win32Ada binding

  This type is now derived from Boolean, which allows more
  natural logical operations with values of this type. This
  is a C convention boolean, meaning that standard C semantics
  (zero=false/non-zero=true) is respected.

NF-315-8725-001 Improved error recovery for missing underscore

  The parser will now recognize some cases of missing
  underscore, for example: "function second one return integer"
  now generates "unexpected identifier, possibly "second_one"
  was meant here.

NF-315-8719-010 New warning for biased rounding

  A new warning flag -gnatwb/-gnatwB turns on/off a new warning
  for cases where the static expression evaluation rules force
  a floating-point number exactly half-way between two machine
  numbers to be rounded away from zero, when at run-time the
  normal biased rounding rules would require rounding towards
  zero. This warning is off by default, and is not turned on
  by the use of -gnatwa.

NF-315-8709-007 New switch -gnatR3 for variant rep info

  The swich -gnatR3 causes output of the size of variant
  record types in a symbolic expression format in cases
  where the size depends on the discriminant.

NF-315-8707-009 Check for integer division by 0 by default

  GNAT now checks for division by 0 by default. This check used
  to be controlled by the -gnato switch and was not done by
  default. It is possible to remove this check with a pragma
  Suppress Division_Check or with -gnatp switch.

NF-315-8706-016 Improved error message for bad Entry

  A clearer error message is now given for the mistake of
  using := in place of = in an entry barrier.

NF-315-8706-006 New formats for -gnatV switch

  You can now use 0/1/2 as synonyms for n/d/f with the -gnatV
  switch. This is more uniform with other similar switches.

NF-315-8621-002 Ten character VxWorks task name limit removed

  The truncation of the Ada task name to 10 characters when the
  task is created under VxWorks has been removed. This was a
  convention followed by some other software, but this limit
  was not enforced and was definitely unhelpful for Ada.

NF-315-8620-004 New License pragma for automated GPL checking

  A new License pragma allows optional automatic checking that
  a program does not violate GPL licensing conditions (i.e.
  that it does not contain mixtures of units licensed in an
  incompatible manner).

NF-315-8612-009 Package GNAT.Registry (access Windows registry)

  GNAT.Registry is high level binding to the Windows registry
  database. This binding implements a set of simple registry
  routines. For complete registry API, but at a lower
  abstraction level, you should use the API provided by
  the Win32Ada API, but GNAT.Registry will prove more
  convenient for many simple registry related editing and
  access tasks.

NF-315-8610-002 Better message placement for enum rep clause

  If a value in an enumeration representation clause is outside
  the representable range, then the error message is placed on
  the offending literal, rather than the clause itself.

NF-315-8609-017 New option for gnatbind to list restrictions

  A new switch -r for gnatbind causes the output of a list of
  pragma Restrictions identifiers that can be used for the
  current partition (possibly improving code efficiency).

NF-315-8605-007 Discriminant checking functions now inlinable

  If -gnatn is specified, the functions used to check for the
  proper discriminant value are now candidates for being
  inlined. This improves performance for programs using variant
  records which are run with checks on.

NF-315-8604-005 Better handling of predefined exception raise

  The code for an explicit raise of Constraint_Error,
  Program_Error, or Storage_Error is improved, saving time
  and space, and meaning that these cases can all be used
  with pragma No_Run_Time.

NF-315-8604-004 Subprogram out of order msg now has name

  The warning message generated for a violation of the -gnatyo
  (subprograms in alpha order) style switch now contains the
  name of the offending subprogram.

NF-315-8603-003 Hardware interrupt handling for PPC and 68K
  
  The use of the standard Ada facilities for interrupt handling
  has been implemented for hardware interrupts on ppc and
  and 68k targets.  Interfaces.VxWorks has also been enhanced.

NF-315-8601-012 Tree can be output in syntax only mode

  The -gnatdt (dump tree file for diagnostic purposes) is
  now recognized when used together with -gnats (syntax
  only) to allow a dump of the unanalyzed parse tree.

NF-315-8519-008 Zero Cost Exceptions implemented on VMS.

  Zero Cost Exceptions have been implemented on VMS and made
  the default. This eliminates the penalty for setting up
  exception handlers and will speed up many programs.

NF-315-8405-008 Better diagnostics for error in gnat.adc

  When gnatmake (as opposed to gcc) reads a bad gnat.adc file,
  it simply says "syntax error" without further identifying
  the error or its location. This circuit is now enhanced to
  give a detailed message saying what is wrong and where.

NF-315-8314-006 New documentation for Intrinsic Subprograms

  A new chapter in the GNAT Reference manual gives full details
  on the set of intrinsic subprograms implemented in GNAT, 
  notably including a full set of intrinsic shift functions
  that can be applied to user defined signed integer types
  and binary modular types.

NF-315-8313-001 Warning on useless Bit_Order attribute clause

  A Bit_Order attribute clause specifying the non-standard bit
  ordering applied to a record for which no component clauses
  are given can never have any effect (since bit numbering is
  not an issue if there are no component clauses). A warning
  is now generated on encountering the useless clause.

NF-315-8220-004 Ada library building enhancements

  Building Ada libraries that can be used outside of the Ada
  context is now simplified with the new gnatbind -Lxyz switch,
  which allows the name of the adainit and adafinal procedures
  to be changed to xyzinit and xyzfinal. GNAT has also been
  enhanced to make sure that any Ada unit can not be elaborated
  twice. These enhancements make it easier to distribute one or
  more Ada libraries in turn key form.

NF-315-8019-002 Integration of GDB version 5.0

  On most targets, we have now upgraded the Ada aware GDB
  technology and associated GVD technology to GDB 5.0,
  which provides important improvements in both reliability
  and functionality.

NF-315-7930-003 Documentation of Inline Assembler

  A new chapter in the GNAT User's Guide uses a series of
  examples to describe the main features of Inline Assembly
  language programming.

NF-315-7002-004 Switch for gnatchop to preserve time stamps

  A new switch for gnatchop (-p) (/PRESERVE in VMS) causes the
  time stamps of the output files to be reset to match the time
  stamp of the input file, which may be useful for preserving
  coherency of time stamps in an environment where gnatchop is
  used as part of the build process.
