=========================================================
GNAT Pro 5.01 NEW FEATURES LIST Current as of Sep 8, 2003
=========================================================

Copyright (c) 2003, Ada Core Technologies

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

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

NF-501-C701-010 Improved debug of implicit return (2003-07-02)

  If a procedure has an implicit return statement, the
  debug line number is now associated with the end line
  of the procedure (instead of the last statement of the
  procedure). This allows setting a breakpoint on this
  implicit return.

NF-501-C701-002 New restriction No_Exception_Streams (2003-07-02)

  A new restriction No_Exception_Streams prevents stream
  operations on types Exception_Id/Exception_Occurrence.
  The generated code is simplified by avoiding registration
  of exceptions when they are declared.

NF-501-C607-001 case normalization in Normalize_Pathname (2003-07-05)

  A new boolean parameter Case_Sensitive is added to
  GNAT.OS_Lib.Normalize_Pathname. If this parameter is
  set to False, the result of this function in non
  case-sensitive file system like Windows and OpenVMS
  is folded to lower case. The default value for this
  parameter is True, and with this default value of
  this parameter the functions has the same behavior
  as before, so this change is upwards compatible.

NF-501-C606-015 Proper inlining of To_Pointer and To_Address

  The To_Pointer and To_Address conversion functions in
  System.Access_To_Address_Conversions are now treated as
  intrinsic by the compiler. An invocation of To_Pointer
  generates no code.

NF-501-C523-003 GDB handles package Standard qualification (2003-06-01)

  GDB will now recognize names of the form Standard.X.
  You can use this feature to disambiguate cases in which
  a local definition has a simple name matching a name
  in package Standard.

NF-501-C519-005 Better handling of warnings on generics (2003-05-22)

  The general mechanism for detecting warnings on generic
  templates or on instances (where the warning depends on
  the particular characteristics of the instantiation)
  have been improved. The compiler now generates a number
  of additional useful warnings for generics.

NF-501-C518-003 Binding with -shared with shared libraries (2003-05-19)

  When project files are used and one of the project files
  is a non-static library project file, gnatbind is invoked
  automatically with the switch -shared. It is no longer
  necessary to put this switch in package Binder of the
  main project file.

NF-501-C516-021 Better code for formal array assignments (2003-05-20)

  Certain cases of array assignments involving constrained
  one-dimensional formal parameters are now implemented
  more efficiently.

NF-501-C516-016 Import/Export and access parameters (2003-05-24)

  In the extended import/export pragmas, where the exact
  subprogram can be specified using the PARAMJETER_TYPES
  argument, it is now possible to match/specify an access
  parameter by using the syntax type_name'access in the
  parameter types argument.

NF-501-C512-006 Support for bigger stack sizes on GNU/Linux (2003-05-12)

  It is now possible to specify stack sizes larger than two
  megabytes in GNU/Linux systems, using pragma Storage_Size.

NF-501-C508-002 Pictures for milli, micro and nanoseconds (2003-05-12)

  GNAT.Calendar.Time_IO now supports new picture tags for
  milliseconds, microseconds and nanoseconds.

NF-501-C507-018 Library project files on IRIX (2003-05-09)

  Static and shared Library Project Files are now supported
  on IRIX.

NF-501-C507-017 Static library project files on HPUX (2003-05-09)

  Static only Library Project Files are now supported
  on HPUX.

NF-501-C507-016 Static library project files on AIX (2003-05-09)

  Static only Library Project Files are now supported
  on AIX.

NF-501-C507-014 Static library project files on VxWorks (2003-05-15)

  Static only Library Project Files are now supported
  on VxWorks.

NF-501-C430-007 New restrictions pragma No_Finalization (2003-05-11)

  A new restrictions identifier No_Finalization is defined,
  which prevents any use of program defined Initialization
  or Finalization in the application. This restriction
  parameter applies to all units in a partition and must
  be applied consistently.

NF-501-C429-008 New gnatbind switch -F (2003-05-07)

  There are cases when gnatbind should generate checks for
  the elaboration flags before calling the elaboration
  procedures, but gnatbind does not have the necessary
  information to do so. The new gnatbind switch -F will
  guarantee that these elaboration flag checks are
  generated.

NF-501-C428-019 Validity checking for composite comparisons (2003-05-11)

  Previously validity checking only applied to direct
  operations on scalar values. The scope has now been
  increased to include composite comparisons, with
  validity checks being performed on all scalar array
  or record components involved in the comparison.

NF-501-C428-016 Better message for bad Standard casing (2003-05-18)

  If style checking for standard casing of entities in
  Standard is enabled, the error message now includes
  the expected standard casing. This also allows GPS to
  correctly auto-fix the casing if an error is made.

NF-501-C415-011 GNAT.OS_Lib.File_Descriptor non-private (2003-05-05)

  The GNAT.OS_Lib.File_Descriptor type is now defined as a
  non-private integer type, representing the normal C value
  of the file descriptor, allowing easier use with other
  packages requiring file descriptor values.

NF-501-C415-006 New pragma No_Initialize_Scalars (2003-04-30)

  The configuration pragma No_Initialize_Scalars applies
  to an entire partition, and specifies that no use of
  the pragma Initialize_Scalars occurs anywhere in the
  partition. This allows the generation of more efficient
  code, in particular cases of null initialization
  procedures can be suppressed.

NF-501-C415-001 Attribute Executable_Suffix (2003-04-15)

  A new attribute Executable_Suffix in package Builder of
  Project Files allows overriding of the default platform-
  specific executable suffix.

NF-501-C401-015 Absolute addressing for objects on AAMP (2003-04-17)

  The GNAAMP compiler now generates absolute-mode
  instructions when addressing imported objects rather
  than normal global addressing instructions, and
  ensures that references to memory-mapped objects
  will not be optimized in a way that violates the
  volatile nature of such objects.

NF-501-C328-010 Inlining for Unchecked_Conversion (2003-03-29)

  A subprogram that contains a nested subprogram
  declaration or a subprogram instantiation is not a
  candidate for inlining. GNAT now makes an exception to
  to this heuristic rule for instantiations of
  Unchecked_Conversion. As a result, a number of
  additional run-time functions are elegible for
  front-end inlining.

NF-501-C325-012 Overriding a source with an exception (2003-03-26)

  If, following the naming scheme of the project, a file
  contains the same source as a unit that has been given
  an exceptional name, then this file is not included in
  the source of the project.

NF-501-C317-016 No spurious warnings on implicit equality (2003-03-19)

  Compiler does not generate a warning on an unusued
  equality operation that is a renaming of another
  equality, when the only use of it is in an inequality
  operation.

NF-501-C314-016 More accurate warnings for generics (2003-05-11)

  In some cases, constraint error warnings were placed
  on the generic template in cases where the message
  could depend on values supplied by a particular
  instantiation. Such messages are now always placed
  on the particular instance (with a pointer to the
  location in the template as usual).

NF-501-C314-013 Warnings on with'ed units suppressed (2003-05-17)

  When a unit is compiled, warnings on any units that
  it with's are now suppressed. These warnings will be
  generated when the with'ed unit is compiled, so the
  effect of this is to suppress many redundant warnings
  especially when an entire system is compiled.

NF-501-C312-024 No redundant constraint checks for float (2003-03-19)

  The compiler does not generate constraint checks on an
  expression of a private subtype whose full view is an
  unconstrained floating point type, such as Float.

NF-501-C311-010 Put gnatmake temporary files in TMPDIR (2003-03-14)

  If environment variable TMPDIR is defined and its value
  is an absolute path, then gnatmake will create temporary
  files (mapping files, configuration pragmas files and
  path files) in the directory designated by TMPDIR
  instead of the current working directory or the object
  directory of the main project file.

NF-501-C310-008 Multiple compilations and project files (2003-03-11)

  When gnatmake is invoked with a project file and no main
  specified either on the command line or as attribute Main
  of the project file, and with the -jx switch (/PROCESSES=
  VMS qualifier), several compilation processes can now
  occur in parallel.

NF-501-C307-015 Compiler rejects SFN pragmas with project file (2003-03-11)

  When a project file is used by gnatmake, the compiler
  will reject the compilation if a pragma Source_File_Name
  is used in a source or in a configuration pragmas file.
  Naming schemes should be specified in the packages
  Naming of the project files. Rejection of ordinary
  Source_File_Name pragmas avoids confusion caused by
  conflicting specification of file names.

NF-501-C307-004 Optional sorting of body stubs in gnatstub (2003-03-11)

  Previously, gnatstub alphabetically ordered all the local
  stub bodies in the generated package body. Now this alpha
  ordering is optional, and the default is to generate stub
  bodies in the same order as the corresponding specs are
  ordered in the spec of the argument package declaration.

NF-501-C226-004 Control over unrecognized pragma warning (2003-02-26)

  A new switch -gnatwG is available to turn off warnings
  on unrecognized pragmas. This warning is on by default.

NF-501-C225-012 Redundant warnings on controlled types (2003-02-26)

  The compiler recognizes that a controlled type whose
  parent type is a fully initialized type, and whose
  record extension is empty, is itself fully initialized,
  and that no warnings should be emitted for the
  declaration of objects of the type.

NF-501-C221-010 More consistent IEEE behavior (2003-02-21)

  On machines providing IEEE floating-point arithmetic
  semantics, conversions to unconstrained floating-point
  types (e.g. the base types declared in Standard) now
  generate infinite results rather than Constraint_Error
  exceptions for out of range values.

NF-501-C221-006 Improved code for 'for' loops with GNAAMP (2003-02-24)

  The AAMP back end now generates the loop limit test at
  the end of a 'for' loop and recognizes static bounds
  cases where the initial empty loop test can be
  eliminated. Also, the loop limit is no longer saved
  in a temporary in the static case and redundant
  temporaries are eliminated for nonstatic loop limits.

NF-501-C221-001 More consistent handling of 0.0**negative (2003-02-21)

  Previously, raising floating-point zero to a negative
  power caused Constraint_Error to be raised even for
  unconstrained floating-point types. Such types now
  result in a properly signed infinity rather than
  an exception.

NF-501-C220-019 Streamlined run-time exponentiation (2003-02-21)

  The run-time routines for supporting integer and float
  exponentiation have been simplified from 22 files to
  10 files, and generics are eliminated. This makes it
  easier to certify this feature in the run-time.

NF-501-C219-009 Source line length up to 32767 (2003-05-11)

  Previously, the maximum length line for an Ada source
  file was limited to 255 characters. It is now possible
  to specify a maximum line length of up to 32767 using
  -gnatyMnnn where nnn is the maximum line length

NF-501-C214-017 Better warnings for nested package entities (2003-05-12)

  Compiler warns if a use clause applies to a package
  declared in some unit in the context, and no entities
  from the package are referenced.

NF-501-C214-016 Better handling of static aggregates (2003-02-27)

  A static aggregate of any size is expanded statically
  when it appears in the body of package whose declaration
  has a Preelaborate pragma.  Previously this was done only
  for aggregates in the package declaration itself.

NF-501-C213-007 Better warnings for out parameters (2003-02-16)

  The compiler produces more accurate warnings on out
  parameters that are read before being assigned. Such
  warnings were not being generated in a body that had
  a previous spec in the same unit.

NF-501-C212-005 No error for "gnatmake -c -S" (2003-02-14)

  For gnatmake, use of the compiler switch -S on the
  command line or in package Compiler of a project file
  will no longer result in error, provided that gnatmake
  is invoked in compile only mode (gnatmake switch -c,
  without -b).

NF-501-C211-013 Mapping files for the binder (2003-03-25)

  When a project file is used by gnatmake and the -C switch
  (use mapping files) is used, gnatmake will invoke
  gnatbind with a mapping file. This should improve the
  performance of gnatbind, in particular when there are
  many ALI files to read, or the ALI files are accessed
  via a network connection.

NF-501-C211-001 Vectored socket input/output (2003-03-14)

  GNAT.Sockets now includes a binding for the readv and
  writev (vectored receive/send) system calls, where
 available. New subprograms Receive_Vector and Send_Vector
  allow the user to take advantage of the operating
  system's scatter/gather facilities. On platforms that
  do not support these calls, a compatible implementation
  based on read and write is provided.

NF-501-C206-005 More flexible support for foreign threads (2003-06-18)

  The new procedure GNAT.Threads.Unregister_Thread_Id now
  allows a program to unregister and free the memory
  associated by the GNAT run time with a specific thread.

NF-501-C204-018 Mutually dependent project files (2003-02-12)

  It is now possible to have circularities in project
  files provided that at least one of the project files
  is imported with a "limited with". This is useful when
  sources are legally mutually imported between project
  files. The name of a project file imported with a
  "limited with" cannot be mentioned in the importing
  project file.

NF-501-C130-007 Speedup in gnatmem (2003-01-31)

  The processing speed of big gmem.out files has been
  significantly improved.

NF-501-C130-006 Gnatmem and PATH (2003-01-31)

  Gnatmem will now search for the executable given as a
  parameter in the current directory as well as on the
  current PATH. This means that the normal case of
  referencing a file in the current directory works
  without needing a "dot" entry in the path.

NF-501-C128-014 Relational ops for GNAT.OS_Lib.OS_Time (2003-01-29)

  The operators "<" ">" "<=" and ">=" are now defined
  for the type GNAT.OS_Lib.OS_Time with their obvious
  conventional meanings. These can for example be used
  to compare time stamps of files.

NF-501-C123-019 Warnings on unused generic formals (2003-02-07)

  The compiler now flags generic formal parameters that
  are not used in the spec or body of the generic.

NF-501-C121-024 Full deallocation for task components (2003-01-27)

  If a task is a subcomponent of a dynamically allocated
  record or array, the deallocation of the enclosing
  object fully recovers the storage allocated for
  the task components.

NF-501-C121-020 Better warnings for selective accept (2003-02-02)

  A warning is now posted if an accept condition references
  a potentially unassigned variable. Some such warnings
  were lost in the past, and pragma Warnings (Off|On) now
  works correctly to suppress such warnings.

NF-501-C121-017 Better handling of Unreferenced in generic (2003-01-23)

  Compiler does not place a warning on a generic body when
  there is a pragma Unreferenced for the generic unit. The
  compiler used to treat the body as a reference, and
  considered the pragma incorrect.

NF-501-C117-006 Locate_Regular_File and relative paths (2003-01-21)

  When GNAT.OS_Lib.Locate_Regular_File is called with a
  relative path that includes directory information, if
  the file is not found relative to the current working
  directory, each directory in the Path will now be tried
  as the root directory of the relative path.

NF-501-C116-021 Auto-Initialization of SAL on Solaris (2003-06-17)

  Dynamic and relocatable Standalone Libraries can be
  automatically initialized on Solaris.

NF-501-C116-019 Library Project Files on VMS (2003-04-11)

  Library Project Files are now implemented on VMS, including
  dynamic libraries (shared images) and auto-initializing
  Stand-Alone Libraries.

NF-501-C103-004 Value tracking in conditional statements (2003-02-11)

  When a condition appears in an IF or ELSIF statement, the
  compiler now deduces information about the range of the
  variable. This allows more efficient code and elimination
  of some checks. For example an access check is not needed
  if you have just verified that the pointer in question is
  non-null.

NF-501-BC11-017 GDB Array equality/inequality (2003-05-25)

  GDB can now test certain arrays for equality/inequality
  (the operators = and /=). In particular, these operators
  work for strings and for most arrays of integers or
  enumeration values. The test is for bitwise equality of
  representation, so it will not generally give correct
  results when array elements are reals, have unused bits
  with undefined values, or have user-defined equality.

NF-501-BC11-015 Stand-alone Libraries (2003-01-16)

  For platforms that support Library Project Files,
  Stand-alone Libraries may now be built.
  Stand-alone Libraries are libraries that include
  initialization and finalization procedures that can be
  called by a foreign main and also used with an Ada main.
  See documentation in GNAT User's Guide

NF-501-BC10-007 GDB "task" command enhancement (2003-03-06)

  When debugging an application using Ada tasks, it is no
  longer necessary to execute the "info tasks" command
  before the "task" command can be used.

NF-501-BC02-004 Traversing and sorting dynamic tables (2003-04-29)

  New generic procedure to traverse (For_Each) and to sort
  (Sort_Table) have been added to generic package
  GNAT.Dynamic_Tables.

NF-501-B830-007 Dynamic hash table support (2003-05-17)

  A new package GNAT.Dynamic_HTables (g-dynhta.ads) is
  available, which is similar to GNAT.HTables, but the
  hash tables are dynamic objects which can be allocated
  dynamically and incorporated into other data structures.

NF-501-B827-008 Full asociative array declarations (2003-04-19)

  Full associative array declarations are now allowed in
  project files:
     for Default_Switches
       use Default.Builder'Default_Switches;
  The value must be the same associative array attribute
  in an imported or extended project.

NF-501-B808-003 Array and String splitter packages (2003-07-05)

  GNAT.Array_Split is a new generic package. Given a set
  of separators, split an array wherever the separators
  appear, and provide direct access to the resulting slices.
  GNAT.String_Split and GNAT.Wide_String_Split are two
  library level instantiations of this package for types
  Standard.String and Standard.Wide_String respectively.

NF-501-9915-003 Improved code for zero divide on x86 (2003-05-11)

  The x86 ports of GNAT now rely on the hardware zero
  divide exception to catch division by zero, avoiding
  the need for inefficient software checks.

NF-501-9606-015 Initialize_Scalars value set at run time (2003-05-24)

  A new binder switch -Sev allows the initializing values
  used in Initialize_Scalars mode to be set at run time,
  using an environment variable GNAT_INIT_SCALARS=xx,
  where xx is in/lo/hi/xx (xx = two hex digits) with the
  same meanings as if they had been used statically in
  the -S switch at bind time.

NF-501-9409-012 Improved debug for multi-file units on AAMP (2003-06-03)

  The AAMP compiler now generates multiple source records
  in the object code for program units whose code covers
  more than one source file. Now that the Facade debugger
  (version 3.7 and above) can handle more than one source
  record per object, this enhances debugging of such
  program units, permitting source display, stepping,
  etc. for both the specification and body of library
  packages, inlined subprograms, generic instantiations,
  and subunits.

NF-501-9320-009 Improved code for array sizes in GNAAMP (2003-02-20)

  The AAMP compiler now generates more concise code for
  computing the sizes of formal array parameters. It also
  encapsulates the size computation in a function since
  the size is not normally needed. A back end optimization
  was also implemented to eliminate nested subprograms
  that are not referenced, so formal array size functions
  are not even generated when not needed.

NF-501-9307-023 GNAAMP version and command info in asm file (2003-06-11)

  For AAMP targets, the compiler now emits SYSTEM_ID. and
  COMMAND. macros at the beginning of each assembly file,
  containing the compiler version and date, target name,
  and compiler command-line information.

NF-501-8518-010 New Attribute Standard'Target_Name (2003-03-14)

  The attribute reference Standard'Target_Name returns a
  string identifying the target name. The string is the
  standard gcc identifier for the target without the
  terminating directory separator character.

NF-501-7817-005 Task switching on VMS with GDB (2003-03-06)

  Task switching in GDB is now implemented on VMS. This
  feature allows the user to view the call stack of active
  tasks at a breakpoint.

NF-501-7508-003 Better messages for obsolete ALI files (2003-02-25)

  When a read-only ALI file is obsolete, the binder will
  now issue a specialized warning for this situation,
  rather than a generic message noting the file must
  be recompiled.
