======================================================
GNAT 3.16 NEW FEATURES LIST Current as of May 31, 2003
======================================================

Copyright (c) 2002-2003, Ada Core Technologies

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

For some entries, an ISO date (YYYY-MM-DD) appears in
parentheses after the description line. This date shows
the date of implementation of the feature. Any wavefront
subsequent to this date will contain the indicated feature.

NF-316-C307-007 Platform-specific timers in Florist (2003-05-30)

  Baud rates defined in posix-terminal_functions.ads now
  include 38400, 57600, 115200, 230400, and 460800 baud.

NF-316-C128-008 Platform-specific timers in Florist (2003-05-30)

  A new package POSIX.Timers.Extensions has been added
  to Florist that facilitates the use of platform-specific
  extensions to POSIX timers. The only one currently
  implemented is access to an extra-precision timer on SGI
  IRIX systems.

NF-316-C102-003 Additional warnings in subunits (2003-01-07)

  Unused local entities within subunits generate warnings,
  even when the subunit is compiled on its own (for
  semantic checking only) and other subunits of the
  parent are present. Previously, the presence of
  any other unanalyzed stub inhibited all warnings.

NF-316-BC24-006 More efficient overflow checking for ABS (2003-01-07)

  The generated code for overflow checking for the ABS
  operator has been improved.

NF-316-BC17-011 Better message for ambiguous generic formal (2002-12-17)

  If an instantiation is rejected due to ambiguous possible
  interpretations for an actual subprogram, the error
  message now includes a list of the multiple matching
  functions to make it easier to resolve the difficulty

NF-316-BC14-001 Better code for nested packed aggregates (2002-12-19)

  The optimization of small constant packed array
  aggregates (which computes the value at compile time)
  is now extended to the case of such aggregates when
  they appear nested within a higher level array or
  record aggregate.

NF-316-BC12-006 Full project path name in brief error msgs (2002-12-13)

  A new gnatmake switch -F instructs gnatmake to output
  full project path names instead of simple file names
  at the beginning of each brief error message line.

NF-316-8928-006 Support for XDR in stream attributes (2002-12-11)

  An alternative implementation of the stream attributes
  ('Read, 'Write) is supplied in s-strxdr.adb, using the
  target-independent XDR standard representation for
  scalar types.  Documented in GNAT Reference Manual.

NF-316-BC10-010 Support for gnatmem GMEM mode on HP-UX (2002-12-10)

  The gnatmem GMEM mode based on instrumented memory
  allocation is now supported on HP-UX.

NF-316-BC09-009 New -C=<map> switch for gnatmake (2002-12-11)

  It is now possible to invoke gnatmake with a specific
  mapping file, using switch -C=<path to mapping file>.
  This mapping file is taken into account by gnatmake
  itself and passed to each invocation of the compiler.
  -C= is not compatible with the use of project files
  or with -jnnn when nnn > 1.

NF-316-BC05-009 Support for request flags in GNAT.Sockets (2002-12-17)

  It is possible to specify the type of message
  transmissions or receptions using the new parameter
  Flags in Receive_Socket and Send_Socket. In particular,
  it is now possible to send and receive out-of-band data.
  For this purpose, Check_Selector has been overridden
  in order to notify exception events (incoming out-of-band
  data).

NF-316-BC03-018 Warning flag for export/import warnings (2002-12-19)

  A new warning flag -gnatwx/-gnatwX is implemented to
  control warnings for Export/Import pragmas. This is on
  by default, but can be turned off using -gnatwX, the
  sense of which is "do not bother me with warnings on
  Export or Import pragmas concerning possible conflicts
  in calling sequences, I know what I am doing."

NF-316-BB30-002 File names case insensitive in NT/VMS (2002-12-01)

  The default file naming rules specify all lower case
  letters, except on VMS where all upper case letters must
  be used. Previous versions of GNAT enforced this rule.
  It is now the case that on NT and VMS, either lower or
  upper case may be used and are considered identical.
  This has actually been implemented for a while, but the
  documentation had not been updated accordingly.

NF-316-BB22-003 Case-insensitive file names in project files (2002-11-26)

  For VMS and Windows, file names specified for attributes
  Switches are now case-insensitive. For example, in both
  these platforms:
    for Switches ("Pack1.ads")
  is now accepted.

NF-316-BB21-019 Size clause for record subtypes (2002-12-22)

  Previously GNAT would only allow size clauses for records
  if all components were statically constrained. This meant
  that even if a subtype of a variant record had known
  values for discriminants, the size clause for the record
  subtype was still rejected, since technically an array
  field depending on discriminants does not have a static
  constraint. This enhancement allows the size clause to
  be given anyway in this case, since the size is indeed
  known at compile time.

NF-316-BB21-015 No spurious warnings on exported subprogram (2002-12-03)

  Compiler suppresses -unused- warnings on an exported
  subprogram when the subprogram has unused homonyms that
  are not exported.

NF-316-BB19-022 Clearer msg for exception during adjust (2002-11-24)

  If an exception is raised while executing an adjust
  routine for a controlled type, the message associated
  with the exception now explicitly mentions the case of
  Adjust as well as Finalize. This avoids confusion.

NF-316-BB19-012 Removing inherited sources from project (2002-12-04)

  It is possible to indicate in a project file that
  extends another that some inherited sources are not
  part of this extended project file. This is necessary
  to be able to compile an overloaded package spec that
  no longer needs a body: the inherited body must be
  removed. This is done through the new project level
  attribute Locally_Removed_Files.

NF-316-BB18-011 Component clause in record subtypes (2002-12-22)

  Previously GNAT would not permit a component clause for
  an array component whose bounds depended on one of the
  discriminants of the enclosing record, even if the value
  of the discriminant was known and static in a record
  subtype. This was because the constraint is still
  technically static. This enhancement allows a component
  clause to be given anyway in this case, since the size
  of the component is indeed known at compile time.

NF-316-BB17-005 Better warnings for aggregates (2002-12-19)

  Generally GNAT warns on suspicious uses of possibly
  uninitialized variables. However, warnings of this kind
  were not generated for accesses within aggregates, and
  this new feature ensures generation of warnings for
  aggregate references as well.

BF-316-BB14-005 Suppress warnings on instances in dead code (2002-11-15)

  Proper warnings on an instantiation are suppressed when
  the instance appears in unreachable code within an
  enclosing generic unit.

NF-316-BB13-004 Better xref for inherited operations (2002-11-05)

  A use of an operation that is inherited through multiple
  derivations is properly seen as a use of the ancestor
  operation, for navigation purposes.

NF-316-BB12-018 Support for AAMP interrupt procedures (2002-12-17)

  The GNAAMP compiler allows pragma Interrupt_Handler to be
  applied to library-level parameterless procedures and
  generates IERET instructions in place of RET instructions
  for the return points within such a procedure.

NF-316-BB12-005 Improved message for limited type misuse (2002-12-13)

  There are a number of error messages which complain
  about improper use of a limited type. Sometimes it can
  be tricky to figure out why a type is limited. New
  messages are added to help in this task. In particular
  if a record becomes limited because a single field is
  limited, the message will point out this field.

NF-316-BB11-012 New warning for boolean variable condition (2002-12-01)

  If a Boolean variable is used in a condition, and the
  value is known at compile time, then if the -gnatwc
  switch is used, a warning will now be generated. The
  warning is still suppressed for constant booleans,
  which are typically used for conditional compilation
  where it is understood that the condition is constant.

NF-316-BB11-004 Improvement in GNAT.Expect under Windows (2002-11-13)

  The GNAT.Expect.Expect procedures under Windows now use
  a better polling mechanism to take into account both
  very short delays and long ones.

NF-316-BB09-001 Warning for exported local variables (2002-12-04)

  The application of pragma Export to local variables of a
  subprogram is dubious, since only statically allocated
  variables can be made known to the linker. What GNAT
  does (and has done for a long time) in this situation
  is to make the variable static, but this has real and
  rather peculiar effects if the subprogram is called
  recursively. A warning is now issued for this usage,
  and it is recommended that it be avoided if possible.

NF-316-BB07-019 Better xref for formals in bodies (2002-11-07)

  The formals for a subprogram body or generic subprogram
  body are treated properly as references to the formals
  in the spec, and the warnings on unused formals are
  posted on the latter.

NF-316-BB07-011 Better xref for implicit type use (2002-11-07)

  The use of an operator that renames a predefined operator
  is properly treated as a use of the type over which the
  operator is declared. This removed superfluous warnings
  about packages whose entities are not referenced.

NF-316-BB06-012 Support for -aamp_target switch for AAMP (2002-12-12)

  The switch -aamp_target allows users to specify an
  alternative AAMP target name that is used to determine
  the location of the run-time library sources and objects
  as well as the macro library. The target name can also
  be specified by setting the aamp_target environment
  variable.

NF-316-BB06-011 Better xref for record components (2002-11-06)

  References to components of constrained subtypes of a
  discriminated type are treated as references to the
  declarations of the corresponding components in the
  parent type, for navigation purposes.

NF-316-BA30-020 Better warnings for access types (2002-10-31)

  Points of use of an access type whose designated type is
  incomplete are now reported by gnatxref.

NF-316-BA30-012 New unit GNAT.Compiler_Version (2002-11-02)

  A new unit GNAT.Compiler_Version (g.comver.ads/adb)
  in the GNAT runtime library allows a program to access
  the version number of the compiler used to compile the
  program (more accurately the version of the binder that
  is used to bind the program, which is normally the same.

NF-316-BA30-007 Limit on pragma Ident length removed (2002-11-02)

  Pragma Ident now accepts strings of any length. The
  compiler does not enforce a limit of 31 characters.

NF-316-BA30-006 Better warnings on controlled components (2002-11-05)

  Compiler does not flag as potentially uninitialized
  objects with controlled components that do not have an
  explicit initialize operation and whose subcomponents
  are initialized.

NF-316-BA29-003 Full path names in brief error messages (2002-12-13)

  A new compiler switch -gnatef instructs the compiler to
  output a full path name instead of a simple file names
  at the beginning of each brief error message line.

NF-316-BA26-001 New library package GNAT.Exceptions (2002-10-26)

  Normally it is not possible to raise an exception with
  a message from a subprogram in a pure package, since the
  necessary types and subprograms are in Ada.Exceptions
  which is not a pure unit. GNAT.Exceptions provides a
  facility for getting around this limitation for a few
  predefined exceptions, and for example allows raising
  Constraint_Error with a message from a pure subprogram.

NF-316-BA25-011 Warning on unused formals in generic body

  GNAT now emits warnings on generic formals that are never
  referenced in generic subprogram bodies.

NF-316-BA25-004 Null external name for export pragmas (2002-10-28)

  If the External parameter for an extended export pragma
  (Export_Function/Procedure/Valued_Procedure) is given as
  a null string, then no external name is applied, but the
  pragma is otherwise effective, and in particular the
  Parameter_Types and Mechanism parameters can be used
  to control parameter passing mechanisms. This change is
  compatible with the behavior of DEC Ada 83.

NF-316-BA22-017 More accurate unreferenced messages (2002-10-26)

  A reference in a representation clause or in some
  pragmas should not count as a reference for the purpose
  of giving warnings about unreferenced entities. For
  example if a type is declared, and then a pragma Pack
  and a size clause are given for this type, but there
  are no other references, then a warning is still
  appropriate. This is now implemented, so the use of
  the option -gnatwu will now identify additional cases
  of unreferenced warnings.

NF-316-BA18-009 Warnings for non-main program pragmas (2002-10-22)

  A warning is now generated for the use of a main program
  pragma like Priority in a subprogram that cannot possibly
  be a main program (for example, a subprogram nested
  within a package).

NF-316-BA18-004 GDB prints Address values in hexadecimal (2003-01-08)

  GDB now prints values of type System.Address in
  hexadecimal format (previously these were printed in
  decimal like any other modular integer type).

NF-316-BA15-006 Warning on unsused imported subprogram (2002-10-05)

   GNAT now emits a warning on a subprogram mentioned in a pragma Import
   that is not used elsewhere.

NF-316-BA07-013 Configuration pragma files support in ASIS (2002-10-13)

  The result of Asis.Elements.Compilation_Pragmas query now
  includes the configuration pragmas given in the GNAT
  configuration file(s). A_Configuration_Compilation unit
  kind is fully implemented.

NF-316-BA04-020 Warning on unreferenced exception (2002-10-05)

  The -gnatwu warning for unreferenced entities now
  includes exceptions, so if an exception is declared and
  never referenced a warning message will be generated.

NF-316-BA04-004 Improved discriminant exception message (2002-10-03)

  When an discriminant check exception is raised, the
  exception message now identifies the line of the
  actual discriminant reference, rather than of the
  definition of the record type.

NF-316-BA04-003 More efficient gnatxref and gnatfind (2002-10-11)

  These two tools have been rewritten to improve their
  efficiency. In some cases, gnatxref runs up to one
  hundred times faster, making it practical to apply this
  tool to a large set of sources.

NF-316-BA04-001 Rules for naming schemes are relaxed (2002-10-06)

  The rules for Ada prefixes in project files have been
  relaxed to allow additional schemes. For example it is
  now allowable to specify "_s.ada" for specs and "-b.ada"
  for bodies.

NF-316-BA02-002 Independent style/warning message control (2002-10-08)

  The use of pragma Warnings (Off|On) now no longer affects
  whether style messages are active or not. This allows
  independent control of the two kinds of messages. Style
  messages can be independently controlled using pragma
  Style_Checks (On|Off).

NF-316-BA02-001 Better discriminant optimization (2002-10-03)

  References of the form a.d where d is a discriminant
  and a is a constrained type are now always recognized
  at compile time, avoiding the need for accessing the
  discriminant field at run-time.

NF-316-B930-018 Full checks for volatile access (2002-10-03)

  The requirement in RM C.6(12) that if an access to
  a volatile object is taken, using the access or
  unchecked_access attribute is now fully implemented.
  This means that some violations previously not
  detected are now diagnosed as illegal. This is in
  fact a bug (and appears in the known problems file),
  but is listed here in features, since operationally
  it is a new feature.

NF-316-B929-004 Proper diagnosis of misuse of Base (2002-10-03)

  In Ada 95, the Base attribute can only be applied to a
  scalar type. This check is now fully implemented in GNAT.
  This is really a bug (and is documented in the known
  problems file), but is recorded here, since from an
  operational point of view, it is a new feature. The
  work around to make sure your program is legal is easy,
  simply remove the useless attribute reference.

NF-316-B927-015 Unnecessary access checks suppressed

  A new optimization suppresses many cases of access
  checks where it can be determined at compile time that
  the value involved cannot be null.

NF-316-B926-020 Unknown packages give warnings

  In project files, when a package name is unknown to
  the Project Manager, a warning is issued, not an error.
  Any attribute definition will also give a warning.
  However, a syntax violation in the unknown package will
  will still be an error.

NF-316-B923-014 Better message for missing semicolon

  The case of a missing semicolon at the end of a line
  preceding a line with a pragma is now handled more
  cleanly with a clearer message.

NF-316-B923-005 More efficient unbounded strings handling.

  The package Ada.Strings.Unbounded has been completely
  rewritten so that the representation of unbounded
  strings uses an extra expansion buffer, which avoids
  the need for reallocating the string so frequently.
  This significantly speeds up the Append/Insert/Delete
  procedures (by as much as a factor of 150 for some
  programs). The same change has been done for
  Ada.Strings.Wide_Unbounded.

NF-316-B923-004 New function GNAT.OS_Lib.Is_Symbolic_Link

  This function provides a way to determine whether a given
  pathname is a symbolic link, on systems that support it.

NF-316-B919-008 Better warnings for controlled types (2002-10-12)

  The warning about variables never being assigned now
  pays attention to controlled types. If a variable is of
  a controlled type with an Initialize routine, then the
  assumption is made that this routine does indeed do any
  required initialization, and the warning is suppressed.
  This eliminates many false positive warnings.

NF-316-B917-002 Avoid optimization of overlaid variables

  When address clauses are used to overlay two variables,
  the compiler now marks both variables as volatile, so
  that optimizations assuming no aliasing are avoided.
  Note that this goes beyond the recommendation in the
  RM, which applies only to the variable to which an
  address clause is applied, not to the overlaid variable.

NF-316-B916-009 New package Ada.Command_Line.Environment

  This package allows access to environment variable
  values on systems where this concept makes sense.
  In fact this is not a new feature, in that the package
  has been in the library for some time. But now this
  package is documented in the GNAT Reference Manual
  and may be used without generating portability warnings.

NF-316-B916-006 UTC vs. Local ALI timestamps on VMS (2002-10-10)

  Files are stored with local timestamps on VMS. GNAT has
  been modified to produce local ALI timestamps for
  consistency. This provides better behavior when the same
  files are accessed in different time zones.

NF-316-B910-005 Improved null pointer warnings

  The compile time warning for deferences of possibly null
  access values has been improved. A number of cases are
  now caught that were missed previously, and some cases
  of false positive warnings have been eliminated.

NF-316-B909-018 Possibly uninitialized warning improved

  The warning for reference to a possibly uninitialized
  variable has been improved to include the case where
  the reference occurs in a default expression in another
  object declaration. Previously this case was not caught.

NF-316-B909-017 Improved compile time checking (2002-10-03)

  The checking for conditions known to be true or false at
  compile time has been improved so that now the compiler
  detects many more cases, leading to improved code and
  also generating more useful warnings from -gnatwc.

NF-316-B905-015 Clearer error messages for inlined bodies

  When a body is inlined by the front end, additional
  messages (particularly warnings) may be generated at
  the point of call. The error message circuitry now
  understands this situation, and points to the call
  site, and also references the inlined body.

NF-316-B830-001 Rep output excludes partial entities

  The output from -gnatR2 now excludes entries for
  deferred constants and for incomplete types (the
  information for the corresponding completions
  is output, and contains the useful information).
  This makes the output clearer.

NF-316-B820-007 New Attribute Executable in project files

  A new attribute Executable in package Builder of
  project files allows the specification of a non-default
  executable file name for a specific main source. This
  can be overridden by a -o switch on the command line.

NF-316-B816-012 New switch -v for gnatprep

  A new switch "-v" for gnatprep provides a verbose mode.
  This switch is similar in effect to the -gnatv switch
  of the compiler: verbose mode is used to display
  errors found in the definition file and in the
  input file.

NF-316-B813-002 Many checks moved to front end (2002-10-03)

  Many more run-time checks are now generated in the
  front end of the compiler. This leads to more efficient
  code and also clearer output in -gnatG more. It also
  makes debugging in -gnatD mode more effective. So far
  all discriminant checks are moved, and all range checks
  for discrete conversions and assignments.

BF-316-B808-012  Warn on uninstantiated generic subprogram (2002-09-03)

  GNAT now emits a warning if a local generic subprogram
  is never instantiated.

NF-316-B729-019 New attribute Unconstrained_Array

  This attribute can be applied to any type or subtype
  It is a static attribute that yields True the prefix
  designates an unconstrained array, and False otherwise.
  In a generic instance, the result is still static, and
  yields the result for the generic actual.

NF-316-B726-011 Alignment can be given for packed array

  Previously, if a packed array was represented as a
  modular type (size 64 bits or less and known at
  compile time), any attempt to specify the alignment
  was ignored. Previously it should have been rejected
  but was not, but in any case, this is now properly
  handled, and the alignment specification is accepted
  and properly respected.

NF-316-B726-010 New pragma Compile_Time_Warning

  This pragma allows for the generation o additional
  warnings at compile time under control of the
  application program code. It is particularly useful
  in the case of generics, where warnings can be issued
  for specific instantiations cases.

NF-316-B726-009 New pragma Restriction_Warnings

  This pragma takes a series of one or more restriction
  identifiers like pragma Restrictions but generates
  warning messages if the restriction is violated
  rather than error messages. These warnings may be
  selectively suppressed in the normal manner.

NF-316-B723-004 Application program can call System.Memory

  The system unit containing low level allocation routines
  used to implement the default storage pool can now be
  called from application programs. This may be useful
  for low level memory allocation interfaces (such as
  the GNAT.Table unit provided in the GNAT library).

NF-316-B722-009 Gnatelim now supports projects (2002-10-14)

  Gnatelim now supports the project facility using the
  GNAT driver, making use of project-defined source and
  object paths and naming schemes. A new project package,
  Eliminate, also allows setting of the gnatelim switches
  inside the project.

NF-316-B722-007 More flexibility in Machine_Code ASM call

  When No_Input_Operands or No_Output_Operands is used,
  it is now possible to use package qualification. This
  means that it is not necessary for a client to have
  to have a USE for Machine_Code to use these operands.

NF-316-B718-001 New function GNAT.OS_Lib.Is_Readable_File

  This function provides a way to determine whether a given
  pathname is a readable file, on systems that support it.

NF-316-B713-001 Better handling of Ada.Command_Line error

  If a non-Ada main program neglects to set the variables
  gnat_argc and gnat_argv, an attempt to use subprograms
  in package Ada.Command_Line from the Ada part of the
  code will now raise a Program_Error exception with a
  useful exception message, instead of blowing up.

NF-316-B712-011 VMS style exit codes.

  VMS style exit codes are selectable at GNAT LINK time
  with the /RETURN_CODES=VMS qualifier. The default is
  Posix style exit codes.

NF-316-B712-009 Linking several executables using gnatmake (2002-07-17)

  When gnatmake is asked to link several executables, if
  one link fails, and the option to continue is set
  using (-k or in VMS /CONTINUE_ON_ERROR), then gnatmake
  will attempt to link the other executables. In this case,
  gnatmake will display, at the end, a summary of what
  links succeeded, followed by what links failed.

NF-316-B708-011 Warning for use of Import/Export_Exception

  The pragmas Import_Exception and Export_Exception are
  recognized and syntax checked, but otherwise they have
  no effect in implementations of GNAT other than the
  implementation on OpenVMS. A warning is now issued if
  either of these pragmas is used on non-OpenVMS targets.

NF-316-B708-009 Dual runtimes for VMS.

  Either a zero cost exception (ZCX) or a setjmp/longjmp
  (SJLJ) runtime is selectable at installation time. ZCX
  exhibits better performance for applications that
  declare lots of exception handlers, whereas SJLJ has
  better performance for applications that raise lots of
  exceptions and it fully supports pragma Import_Exception.

NF-316-B708-004 Better warnings for uninitialized component

  The warning message for a reference to a possibly
  uninitialized component of a record now includes the
  component name as well as the name of the record object.

NF-316-B704-004 gnatmem GMEM mode now works on Tru64 (2002-07-15)

  GMEM, the memory usage tracking mode that uses
  instrumented memory allocation routines, has been
  implemented on Tru64.

NF-316-B703-012 GNAT.Debug_Pools improvements

  The Debug_Pool implementation has been enhanced to
  display trace backs for the invalid memory accesses.
  It is also thread-safe, avoids storage leaks, and
  provides support for the debugger.

NF-316-B701-008 Gnatname accepts directory trees

  Gnatname now accepts directory trees after a -d switch.
  Fof example, -ddir/** means "directory dir and all of
  its subdirectories, recursively." This uses the same
  notation as in project files.

NF-316-B701-007 Relative paths for GNAT LINK & BIND

  For GNAT BIND and GNAT LINK, files that are specified
  as relative paths with directory information, are
  converted to absolute paths, with parent being the
  current working directory if specified on the command
  line and the project directory if specified in the
  project file..

NF-316-B629-001 Gnatname accepts foreign patterns

  Gnatname allows a new switch -f to specify foreign
  patterns. Files whose names do not follow an excluded
  pattern nor a regular pattern, and that follow
  a foreign pattern are added to the list of files
  of the project file. The -f switch is only useful if
  -P is also used.

NF-316-B628-011 Control over unchecked conversion warnings

  New switches -gnatwz/-gnatwZ can be used to control
  warnings generated for unchecked conversions when the
  types have different sizes. The default is that such
  warnings are generated as in the past, but -gnatwZ can
  be used to suppress these warnings.

NF-316-B628-002 Better error recovery with missing actuals

  GNAT inserts a plausible value to provide a missing scalar
  actual in an instantiation. This prevent numerous cascaded
  errors and allows to user to identify the error easily.

NF-316-B628-001 Better breakpoint location (02-10-17)

  When setting a breakpoint on a function (or procedure)
  using the location of its declaration, the breakpoint is
  now inserted at the first instruction past the function
  prologue. This avoids the situation where the debugger
  displays incorrect values for the parameters because
  the program was stopped before the parameter-homing
  phase (part of the prologue) was completed.

NF-316-B626-006 Better identification of VxWorks signals

  Under VxWorks, signals that are mapped to Ada exceptions
  now have an associated message that provides information
  about the signal.

NF-316-B625-014 Better error msg for missing right paren

  Some cases of missing right parens at the end of
  subprogram specifications are now handled better
  and give a clear message of a missing right paren.

NF-316-B614-006 Multiple identical --RTS= switches

  For tools that accept the switch --RTS= (compiler,
  gnatmake, gnatls, gnatfind and gnatxref), several of
  those switches may now be specified, provided that
  the same identical path is specified.

NF-316-B614-005 Library project files on Tru64

  Library project files are now supported on Tru64.

NF-316-B612-004 Garbage at end of project files detected

  Any text that follows the end of a project file source
  (except blank space and comments) makes the project
  file illegal. This will detect misplaced modifications
  to project files.

NF-316-B611-015 Better warnings for record fields

  The warning mechanism for uninitialized variables now
  distinguishes between initialized and uninitialized
  record components, giving more accurate uninitialized
  variable warnings for record component access.

NF-316-B610-026 New pragma Keep_Names (undo Discard_names)

  The pragma Keep_Names can specify an enumeration type
  whose names are to be retained, even if they would be
  otherwise discarded as a result of global use of a
  Discard_Names pragma.

NF-316-B610-010 Non existing libraries always regenerated

  In library project files, when the library file is
  deleted, gnatmake will always regenerate the library,
  even when  all the object files are up to date.

NF-316-B607-011 More convenient usage of Get_Host_By_Name

  Get_Host_By_Name accepts either IP address or host name
  as Name parameter. This also masks differences of
  behaviour between platforms.

NF-316-B606-015 Improved error message for USE with no WITH

  If a use clause appears for a unit for which no WITH
  has been given, the error message specifically suggests
  the possibility of a missing WITH.

NF-316-B602-001 Switch -gnatwn to set normal warning mode

  A new switch -gnatwn sets normal warning mode, cancelling
  the effect of a previous -gnatws or -gnatwe. This can
  also be used to cancel the implicit -gnatwe from -gnatg.

NF-316-B530-012 New package GNAT.Exception_Actions

  Callbacks can be registered, and will be called when
  either specific exceptions or any exception is raised.
  This can be used for instance to force a core dump to
  ease debugging.

NF-316-B527-014 Warning for Address_To_Access_Conversions

  If Address_To_Access_Conversions is instantiated with
  an unconstrained array type, then if To_Pointer is used
  the result may not have any bounds information. A warning
  is now generated to alert the client to this potentially
  risky usage.

NF-316-B523-010 New package GNAT.Strings

  A new package GNAT.Strings contains declarations of
  types String_Access, String_List and String_List_Access,
  that were previously declared in GNAT.OS_Lib.

NF-316-B522-003 GNAT.Registry handle REG_EXPAND_SZ.

  The string value of type REG_EXPAND_SZ can now be
  expanded (i.e. embedded variables are replaced by
  the corresponding environment value).

NF-316-B519-013 Improved style checking for token layout

  The style check option -gnatyt (token layout check) now
  checks that there in no space after an apostrophe, and
  also horizontal tabs are treated as spaces everywhere.

NF-316-B519-002 More convenient sorting routines

  New procedures GNAT.Heap_Sort and GNAT.Bubble_Sort in
  files g-heasor.ads/adb and g-bubsor.ads/adb provide
  more convenient implementations of these algorithms
  where the move operation is replaced by an exchange
  and there is no longer any need to have a temporary
  indexed by the special value of zero.

NF-316-B518-013 Array Comparisons more efficient

  All array comparisons are now performed using
  efficient run-time routines. This results in much
  less generated code, and more efficient execution.

NF-316-B518-002 Warning for exporting types

  The compiler now gives a warning on an attempt to
  export a type, noting that the export will have no
  effect (previously this was silently ignored).

NF-316-B516-012 Warning for Address_To_Access_Conversions

  It is quite dubious to instantiate this generic package
  with a target that is a pointer to an unconstrained
  array, since usually no bounds information is available.
  A warning is now given for this dubious usage.

NF-316-B515-004 Find references in Glide enhanced

  The menu Find References in Glide has been enhanced,
  so that it is now possible to keep the result of the
  previous search.

NF-316-B513-011 Improved message for too many arguments

  When a non-overloaded subprogram is called with too
  many arguments, the name of the subprogram is now
  included in the error message, if possible.

NF-316-B511-002 New package GNAT.Perfect_Hash

  GNAT.Perfect_Hash and GNAT.Perfect_Hash.Generators are
  new packages that provide several routines to generate
  static minimal perfect hash functions. The perfect
  property ensures that no collisions occur and that
  each item can be retrieved from the table in one probe.

NF-316-B508-002 Warning for free from empty storage pool

  If an access type is given an explicitly empty storage
  pool with a Storage_Size clause specifying a size of
  zero, then past versions of GNAT have generated warnings
  for allocation from this pool. A warning is now also
  generated for an attempt to free an access type that
  references such a pool.

NF-316-B507-011 Non-standard file names with gnatstub

  The name of the source file used as the argument to
  gnatstub does not have to follow the standard GNAT
  naming convention. It is also possible to explicitly
  specify the name of the sample body file to be created
  by gnatstub

NF-316-B506-011 Control for unassigned variable warnings

  New switches -gnatwv/-gnatwV can be used to turn off
  warnings for references to variables that may be
  uninitialized. The default is that, as in the past,
  such warnings are initialized. The use of -gnatwV
  may be useful in transitioning to 3.16, which
  generates more such warnings than 3.15.

NF-316-B502-006 Better warnings for entry formals

  The warning messages for unreferenced entry formals
  and entry formals of mode out that are never assigned
  is now posted on the body rather than the spec, which
  is more consistent and more convenient.

NF-316-B429-006 GNAT.Socket allows larger socket sets

  Socket sets are no longer limited to 32 sockets in a
  socket set. GNAT.Sockets uses the system socket set size.
  A new procedure Get allows extracting a socket from a set
  instead of checking the presence of any possible sockets
  in a loop.

NF-316-B425-004 Normalize_Pathname Resolve_Links feature

  The function GNAT.OS_Lib.Normalize_Pathname can resolve
  symbolic links on systems that support them. You can
  turn this mechanism off if you only want to remove
  the .. and . directory names from file names.

NF-316-B424-003 New gnatmake switch -D (object directory)

  A new gnatmake switch -D specifies where the generated
  object files and ALI files are to be put. This switch
  is not compatible with project files (-P).

NF-316-B423-001 GNAT.Sockets provides services routines

  GNAT.Sockets provides the service routines like
  Get_Service_By_Name and Get_Service_By_Port. This feature
  is similar in its interface to the host interface.

NF-316-B419-005 gnatmake -u -Pprj main, not in main project

  When using gnatmake with a project file (-Pprj) and with
  option -u, it is possible to specify sources that are not
  in the main project, but in imported projects.

NF-315-B419-004 Project names may include dots

  Name of projects in project files may be made of one or
  more simple names (identifiers) separated by dots ('.').
  A project with a name that includes one or more dots need
  to either import or extend its "parent" project.

NF-316-B413-001 Suppress warnings in null loops

  If the compiler can tell that a loop will never be
  executed, then a warning is given. That's not new.
  What is new is that warnings are now suppressed in
  the body of such a loop (statements that will never
  be executed). This gets rid of a number of bogus
  unhelpful warnings.

NF-316-B412-009 Warning on values for null ranges

  If the compiler knows that a range is null, then it
  knows that no value can conform to the range and that
  Constraint_Error will be raised. A warning is now
  generated in this situation.

NF-316-B412-002 Improved message for unmatched parameters

  When a parameter association with an explicit parameter
  name does not match any existing formal parameter name,
  the explicit selector is now included in the resulting
  error message.

NF-316-B424-010 New Setup_Thread routine

  Setup_Thread has been added to GNAT.Threads. This
  routine behaves like Register_Thread, except that if
  it is called more than once on the same thread, it
  reinitializes all of its tasking-related data structures,
  rather than simply returning the task ID. This semantics
  supports thread restart.

NF-316-B424-010 New Unregister_Thread routine

  Unregister_Thread has been added into GNAT.Threads. This
  routine will unregister a non Ada thread from the GNAT
  run time, and release any memory associated with it by
  the run time.

NF-316-B408-010 New Register_Thread routine

  Register_Thread has been added into GNAT.Threads. This
  routine will register a non Ada thread as an Ada task,
  so that threads and tasks can communicate properly.

NF-316-9931-001 New Copy_Time_Stamps routine

  Copy_Time_Stamps has been added into GNAT.OS_Lib. This
  routine will copy the time stamps (last access time and
  last modification time) from one file to another.

NF-316-9929-013 Clearer definition of ** in HI-E mode

  The situations in which exponentiation may be used
  in no run time mode (GNAT High Integrity Edition),
  are now better defined. Exponentiation is allowed
  only if the entire exponentiation expression is a
  static expression, or if the right argument is a
  static integer expression with a value in the range
  0 to 4. All other cases are forbidden in HI-E mode.

NF-316-9929-010 Warnings generated for infinities

  If a non-static floating-point expression yields a
  value outside the range of the corresponding type,
  and the compiler can determine at compile time that
  this is sure to happen, then a warning is issued
  that an infinite value will be generated at run-time.

NF-316-9927-010 Extended range of priorities for Lynx

  The range of priorities provided in the Lynx version
  of GNAT has been extended to be 0..254, with 255 being
  reserved for Max_Interrupt_Priority. This means that
  the full range of Lynx priorities is now available
  to Ada applications.

NF-316-9924-002 No limits to the number of temp files

  Previously, on some OSes, the number of temp files
  that could be created by GNAT.OS_Lib.Create_Temp_File
  was limited (down to 26). This is no longer the case.
  Also, if two programs try to create temp files in the
  same directory, they will not interfere with each other
  and each program will create different files.

NF-316-9918-008 Elab warnings no longer in -gnatwa

  Elaboration warnings (-gnatwl) is no longer included
  in the warnings activated by -gnatwa. This seems a
  better choice, since -gnatwl is a methodological
  warning, which is only applicable to some programs.

NF-316-9915-010 Names are case insensitive on Windows/VMS

  As environment variables on Windows and logical names on
  VMS are case insensitive, names for external references
  in project files and names specified with the -X switch
  on the command line are now case insensitive on those
  operating systems.

NF-316-9915-007 Equal sign after -gnatec and -gnatem

  For the two switches of the compiler -gnatec (for
  config files) and -gnatem (for mapping files), an
  equal sign '=' is allowed (but not required) between
  the switch and the path name of the file. This is
  more readable: -gnatem=mapping vs -gnatemmapping.

NF-316-9913-015 Enhancement to Remove_Dir procedure

  GNAT.Directory_Operations.Remove_Dir has been enhanced
  to take a new parameter that enables recursive directory
  removal (removal of nested directories). The default
  parameter setting ensures backward compatibility with
  previous calls to this procedure.

NF-316-9909-002 Elimination of duplicate checks

  Several cases of duplicated checks within a single
  expression have been eliminated, improving execution
  performance. One particular case in which this helps
  is in assignments to elements of packed arrays.

NF-316-9907-007 Warning on useless use of abs

  If the operator abs is applied to an expression whose
  value is known to be non-negative (e.g. x mod 2), then
  a warning is given if the -gnatwr (warn on redundant
  constructs) option is in effect.

NF-316-9906-016 Multiple errors in subunits now diagnosed

  The compiler will now attempt to locate units in
  subunits even if prior subunits have errors. In
  particular by using -gnatq, you can find semantic
  errors in subunits, even if previous subunits have
  syntactic errors.

NF-316-9905-008 Find Local References in Glide

  Glide has a new menu Find Local References that will
  search for all references to the entity in the current
  file. This is faster than using Find References, which
  will return all the references in the project.

NF-316-9828-006 Static handling of array aggregates

  Multi-dimensional aggregates can now be handled
  statically if they are fully initialized with static
  values. If such an aggregate is used to initialize
  an array object, then no elaboration code is required.

NF-316-9826-016 Compile time divide by zero warnings

  The compiler now generates warnings for cases of
  division by zero that can be detected at compile
  time as known to raise constraint error at run-time.

NF-316-9826-004 Relative path arguments in project files

  Relative search path switches (such as "-Llib") and
  relative file name arguments (such as "x/y/z.o")
  are now allowed in project files. They are relative
  to the project directory of the project file.

NF-316-9823-006 Extending library project files

  A project file extending a library project file is
  a library project file by default. It must declare
  attribute Library_Dir. If it does not define attribute
  Library_Name it inherits it from the extended library
  project file. To make it a non-library project file
  Library_Dir must be declared as the empty string.

NF-316-9821-006 More flexible Storage_Size under Ravenscar (2002-02-25)

  GNAT places no restriction on the argument of the pragma
  Storage_Size when pragma Ravenscar is active. Previous
  versions required the argument to be static.

NF-316-9819-013 Initialization supports NetBSD

  The initialization circuitry in the run time now
  supports NetBSD. ACT does not provide support for
  this build, but this provision makes it easier
  for anyone working on porting GNAT to NetBSD.

NF-316-9819-004 Ada 83 mode diagnoses -1 in for loop

  In Ada 83, negative literals and other similar
  universal expressions cannot be used in a for loop
  unless a specific type is used (for example, the
  usage "for I in -1 .. 10 loop" is illegal). This is
  now properly diagnosed in Ada 83 mode. Note that the
  Ada 83 switch does not guarantee catching all Ada 83
  violations, but we do enhance it from time to time
  when gaps are noticed.

NF-316-9819-003 Extended projects can import others

  An extended project A is now allowed to import another
  extended project B. The import of B is replaced by
  the ultimate (not extended) project that extends B.

NF-316-9818-011 Check improvement for convert to real

  The compiler now does a better job of eliminating
  unnecessary checks for conversion where the target
  type is a fixed-point or floating-point type.

NF-316-9817-001 New Restriction No_Asynchronous_Select

  A new restriction identifier No_Asynchronous_Select
  is defined. This is similar in effect to the use of
  Max_Asynchronous_Select_Nesting=0, except that it is
  always checked at compile time, and the binder checks
  for partition wide consistency of this restriction.

NF-316-9816-003 Consistent handling of invalid data

  The Ada RM allows Program_Error or Constraint_Error
  to be raised for invalid data. GNAT sometimes raised
  one and sometimes the other. This has now been made
  consistent, and GNAT always raises Constraint_Error
  for invalid data (this seems the better choice given
  that the RM requires Constraint_Error for expressions
  in case statements).

NF-316-9814-018 Improved suppression of checks

  The compiler does an improved job of eliminating
  duplicated checks. This can be particularly valuable
  in certain loops where array indexes are repeated.

NF-316-9812-001 Component type included in ali file

  The cross-reference entry for an array type or
  subtype in the ali xref information includes the
  component type. This provides extra information for
  tools (such as GPS and GLIDE) that are driven from
  this cross-reference information.

NF-316-9807-010 New VMS qualifier /SWITCH_CHECK

  For VMS, the qualifier equivalent to -s (recompile
  if switches changed) is now /SWITCH_CHECK (rather
  than /CHECK_SWITCHES). This removes an excessively
  long ambiguity with the compiler qualifier /CHECKS.

NF-316-9806-020 Pragma Elaborate recognized in static mode (2002-12-19)

  Pragma Elaborate is now taken into account as part of
  the static elaboration model processing. It is used to
  indicate that the elaboration dependency is correct for
  the indicated unit. A consequence is that normally you
  should either remove pragma Elaborate statements or
  change them to Elaborate_All unless you are specifically
  intending to indicate that the dependency is correct.
  This is actually not a new feature, since it has been
  implemented when the static elaboration feature was
  first implemented. However, it was not documented in
  detail, and the 3.16 documentation has been updated to
  fully describe the handling of pragma Elaborate.

NF-316-9804-009 New convention Assembly recognized

  The convention identifier Assembly is now recognized
  and treated as synonymous with Assembler.

NF-316-9802-007 Warning for duplicated task entry address

  If a task entry address is given with an address clause
  for an entry in a task type (as opposed to a single task
  definition), then a warning is generated that only one
  task can be declared with this type. Furthermore, if
  the compiler can tell at compile time that more than
  one task of the type is being declared, a warning is
  generated that program error will be raised.

NF-316-9801-007 GDB indexing for optimized arrays

  When programs are optimized, information about array
  bounds may be unavailable to the GDB debugger, in the
  case where the bounds are not known at compile time.
  GDB used to give an error in these cases, and display
  nothing. Now, GDB gives a warning and uses a default
  lower bound of 1. Since GDB performs no bounds checks
  on either indexing or slicing, you can index and slice
  the affected arrays freely.

NF-316-9731-018 Refinement of address clause warning

  The address clause overlay warning is now suppressed
  if the initialization is explicit in the source. It
  is assumed that if an explicit initialization is
  given, then the programmer knows what they are doing.
  The warning is given only when the initialization is
  implicit.

NF-316-9725-013 New switch -x for gnatname

  A new switch -x has been added for gnatname -x for
  "excluded patterns". This new switch specifies a
  naming pattern. Any file name that matches an excluded
  pattern will not be considered, even if it matches a
  "positive" pattern. More than one -x switch may be used
  in a single gnatname command.

NF-316-9722-008 New package GNAT.MD5

  A new package GNAT.MD5 has been implemented. This
  implements the MD5 Message-Digest Algorithm described
  in RFC 1321 (http://www.ietf.org/rfc/rfc1321.txt).

NF-316-9715-014 Name parameter added to C_Streams.Open

  The Ada.xxx.C_Streams.Open procedures now have a new
  parameter Name, which can be used to supply a String
  value that will be the name passed to the underlying
  open routine (and retrievable with the Name function).
  Here xxx is Direct_IO, Sequential_IO, Stream_IO,
  Text_IO, or Wide_Text_IO.

NF-316-9711-005 New Free routine for String_List_Access

  A new Free procedure has been defined in GNAT.OS_Lib
  that frees a pointer of type String_List_Access. This
  can also be used for the subtype Argument_List_Access
  as returned by Argument_String_To_List.

NF-316-9707-016 Improved code for string comparisons

  Comparisons of strings with > < >= or <= operators
  is now much more efficient both in time and space.

NF-316-9622-001 New Copy_File routine in GNAT.OS_Lib

  A Copy_File routine has been added into GNAT.OS_Lib.
  The routine has three modes: Copy, Overwrite, Append.
  It is also possible to preserve the time stamps and
  the read/write/execute attributes if needed.

NF-316-9529-007 Exporting integer values

  A new pragma Export_Value has been added to allow
  exporting a static value from Ada into foreign code.
  The value is associated with a given link name and
  will typically be referenced by external assembly
  code. This pragma is currently only supported for
  the AAMP target.

NF-316-9529-004 Build library for main project

  If the main project is a library project, gnatmake
  will rebuild the library whenever any source needs to
  be compiled, if library projects are supported.

NF-316-9508-010 Universal addressing on AAMP

  A new pragma Universal_Data has been added to allow
  generation of AAMP universal addressing instructions.
  The pragma specifies that all library-level objects
  (Counter 0 data) associated with a library unit are
  to be accessed and updated using 24-bit universal
  addresses rather than the default of 16-bit Data
  Environment (DENV) addressing. Universal addressing
  is supported only for the AAMP family of processors.

NF-316-9305-039 Better control of signal/interrupt handling

  Pragma Interrupt_State has been introduced to control
  which interrupts and signals are reserved, and whether
  default OS handlers should be used for synchronous
  signals normally mapped to Ada exceptions. This allows
  generation of a core dump when an Ada exception would
  normally be raised. The pragma can also be used to
  mark interrupts required by a board support package
  as reserved.

NF-316-9222-001 VxWorks GDB multitasks mode enhancement

  The behavior of the "attach" command in the VxWorks
  debugger has been enhanced when the multitasks mode is
  activated. Instead of deactivating the multitasks mode
  and attaching to the one task specified only, the
  debugger will take control of all the Ada tasks of the
  application, as if the application had been started
  from the debugger with the multitasks-mode activated.

NF-316-9114-004 Warning on implicit dereference

  A new warning switch (-gnatwd) specifies that warnings
  should be generated for any implicit dereference that
  occurs when an access type appears without .all in an
  indexed component, selected component or slice. With
  this warning activated, an explicit .all must be used
  in any situation where an access check is required.
  This warning is off by default, and is not included
  in the set of warnings turned on by -gnatwa.

NF-316-8918-008 More efficient discriminant checks (2002-10-05)

  The code generated for checking discriminants has been
  improved, so that it will run faster. This involves some
  general optimizations for case and if statements that
  will also benefit other programs.

NF-316-8621-004 Stdcall on UNIX default to C convention

  On UNIX platforms the Stdcall calling convention is
  equivalent to a C calling convention. This make it
  easier to build interface for Windows and UNIX DLL.

NF-316-8518-001 More efficient fixed-point multiply (02-10-13)

  When a fixed-point multiply (or an equivalent
  conversion operation) has one operand that is
  constant and small, the multiplication is now
  done using the smallest possible size,
  avoiding unnecessary use of 64-bit arithmetic.

NF-316-8502-002 New pragma Obsolescent

  A new pragma Obsolescent is available for marking
  subprograms as obsolescent. This is provided as an
  aid in modifying existing packages by removing or
  modifying existing subprograms. A new warning option
  -gnatwj/wJ turns on warnings for calls to subprograms
  marked with the pragma, and also for uses of some
  (but not all) features in Annex J of the RM.

NF-316-8413-008 Uninitialized warnings for arguments

  A warning is now issued if a possibly uninitialized
  variable is used as an actual for a subprogram formal
  that is of mode IN or IN OUT. Since this may generate
  a significant number of new warnings, a new compiler
  flag -gnatwV can be used to turn off these warnings.

NF-316-8405-004 Better handling of aggregate assignments

  Nested aggregates with only Others associations are
  expanded in place in assignments when the left-hand
  side is a simple name or an explicit dereference. This
  avoids the creation and copy of redundant temporaries.

NF-316-8311-001 New warning on constant variables

  If a variable is declared and the declaration has an
  initialization expression, and the program does not
  contain any modifications of the variable, a warning
  can now be generated to note that a constant keyword
  could be used. This warning is controlled by -gnatk/K
  and is off by default. The general -gnatwa (turn on
  all warnings) switch does turn on this warning, so
  if you are using -gnatwa you may see new warnings.

NF-316-8218-003 Checks on conversions between limited arrays

  The compiler enforces the decision of AI95-00246, which
  forbids conversions between arrays that do not have a
  common ancestor, when their component types are limited
  or by-reference types. For now, this is only a warning,
  but you should correct the code, since the current
  definition of the language definition does not permit
  such conversions.

NF-316-8120-018 Parameterization of convention identifiers

  A new configuration pragma Convention_Identifier allows
  parameterization of convention identifiers used in other
  pragmas such as Convention and Import. For example if
  you have legacy code which uses Asm86 as the identifier
  for assembler, then you can use the configuration pragma
  Convention_Identifier (Asm86, Assembler) to create a
  synonym Asm86 which can be used in an Import pragma to
  mean Assembler.

NF-316-8114-009 Unhandled exceptions better handled in GDB (2002-10-19)

  When stopping at an unhandled-exception breakpoint, GDB
  attempt to select the frame that actually caused the
  exception, so that the user does not have to use the "up"
  command to find it. In other words, breaks on unhandled
  exceptions now behave like those for specific exceptions.

NF-316-7912-002 Better optimization of constant values

  If a variable is given an initial constant value, then
  the compiler now understands better that uses of this
  variable before the first assignment have a known
  constant value resulting in improved code quality.
  This also allows more warnings to be given about such
  values generating exceptions.

NF-316-7815-009 Better floating-point formats in GDB (2002-01-14)

  GDB will now print floating-point values in a format
  closer to that of standard Ada. For example, 3.0 used
  to print as 3, and now prints as 3.0.

NF-316-7522-011 Integrated preprocessing by the compiler

  The GNAT compiler is now able to integrate preprocessing
  into the compilation process directly without the need to
  run gnatprep as a separate program. Two new switches
  -gnatep and -gnateD are used to control this integrated
  preprocessing function.

NF-316-6902-005 Case independent sorting in gnatxref

  The sorting of entity names in gnatxref is now case
  independent, so that for example a,B,c sort in that
  order rather than sorting upper case first as before.
