======================================================
GNAT 5.05 NEW FEATURES LIST Current as of May 09, 2006
======================================================

Copyright (c) 2005-2006, AdaCore

This file contains a complete list of new features in version 5.05 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 5.05w wavefront
subsequent to this date will contain the indicated feature, as will any
subsequent releases.

NF-505-F509-010 Better installation of POSIX for GNAT (Florist) (2006-05-09)

  A new installation scheme is provided with Florist, following the
  standard configure --prefix=<prefix>; make; make install scheme, and where
  a florist.gpr project file is installed under <prefix>/lib/gnat.

NF-505-F503-009 New attribute Stub_Type (2006-05-03)

  A new implementation-defined attribute is provided: for a prefix
  T that denotes a remote access-to-classwide type, T'Stub_Type denotes
  the type of the corresponding stub objects (stub objects are placeholders
  for remote objects that allow RACWs to be represented as simple local
  access values). This is an internal attribute for implementation of the
  distributed systems annex.

NF-505-F429-008 Friendlier elaboration order for packages (2006-05-02)

  If a package body has an initialization procedure that initializes global
  variables in the spec, it is still possible for elaboration code from other
  packages to access the uninitialized values if Elaborate_Body is not used.
  The elaboration order choice now tries (but cannot promise) to elaborate
  such bodies early enough to avoid this possibility. This goes hand in hand
  with the new warning (F424-009) which will warn of the missing pragmas.

NF-505-F424-009 Warning for possibly uninitialized elab variables (2006-04-29)

  If a package spec has a visible uninitialized variable which is initialized
  directly or indirection from an elaboration block in the package body, then
  there is a danger that a client may access the variable from elaboration
  code before it gets initialized. The usual fix is to add Elaborate_Body to
  the spec. GNAT now generates a warning in this situation with this advice.

NF-505-F412-009 Warnings for missing Volatile in asm statements (2006-04-21)

  If an ASM statement does not specify Volatile, and it is missing either
  input or output operands, or more than one ASM statement appears in a
  row, then it is possible that undesirable optimizations may occur, so
  a warning is now given in these cases.

NF-505-F410-006 Tracking of values works for subprogram actuals (2006-04-12)

  Previously, tracking of values did not work for subprogram actuals. This
  change allows proper tracking of values for subprogram actuals, allowing
  additional useful warnings to be generated by the front end (for example
  in the case of null actuals passed to NOT NULL formals).

NF-505-F409-011 Tracking of values works for subprogram formals (2006-04-09)

  Previously, tracking of values did not work for subprogram formals. This
  change allows proper tracking of values for subprogram formals, allowing
  additional useful warnings to be generated by the front end.

NF-505-F409-009 More information on constant conditions (2006-04-10)

  When the compiler determines that the outcome of a conditional test is known
  at compile time, it now outputs additional information messages pointing to
  assignments, tests, and case alternatives that provided the information for
  making the determination that the outcome was constant.

NF-505-F406-018 System.Priority range expanded on Linux. (2006-04-12)

  Previously, the type System.Priority on Linux was limited to the
  range 0 .. 31. This range has now been expanded to 0 .. 97, allowing
  tasking programs to make use of the entire range of priorities made
  available by the operating system.

NF-505-F404-017 Tracking of values works for qualified variables (2006-04-04)

  Previously, tracking of values worked only for simple identifiers, and not
  for qualified names. This change allows proper tracking even if full name
  qualification is used for the identifier involved.

NF-505-F402-005 Improved tracking of complex conditions (2006-04-03)

  The front end now does a better job of tracking some cases of complex
  conditions, resulting in additional useful warnings about redundant tests.
  Simple boolean variables are also properly tracked in conditions.

NF-505-F402-004 Suppress warning for limited controlled object (2006-04-02)

  Normally the compiler gives a message if a variable is declared and never
  assigned. But this warning is now suppressed for the special case of a
  variable of a type derived from limited controlled, since it is common and
  reasonable usage to declare such variables solely for their initialization
  and finalization semantics.

NF-505-F329-025 Warn on bad array length even if checks suppressed (2006-04-02)

  If the compiler can tell at compile time that an array assignment will cause
  a constraint error, then it gives a warning. Previously this warning was not
  given if checks were suppressed, but in general we try to give such compile
  time warnings even if checks are suppressed, and the compiler is now modified
  to give the warning in this case with checks suppressed.

NF-505-F316-007 Better precision when handling Duration in ERC32 (2006-03-16)

  When transforming Duration into Time_Span, and vice versa, intermediate
  values and operations use Long_Long_Integer in order not to lose precision.

NF-505-F314-010 Support for Priority_Ceiling/Inheritance on AIX (2006-03-16)

  Under AIX, the Locking_Policy pragma is now mapped to the underlying POSIX
  settings PTHREAD_PRIO_PROTECT/INHERIT, relying on the AIX thread library to
  implement this capability. Previousely, the Locking_Policy pragma was
  ignored.

NF-505-F314-006 Better diagnostics on division by zero (2006-03-20)

  When the compiler detects that the right operator of a division, mod, or rem
  operation is equal to zero a warning message is generated. This message now
  indicates which of the previously mentioned operations will raise a
  Constraint_Error at run time.

NF-505-F306-014 New check Alignment_Check (2006-03-22)

  A new check name Alignment_Check can be used in a Suppress or Unsuppress
  pragma. This controls run-time checking for correct alignment of address
  clause values. Suppressing this check will eliminate all such checks.

NF-505-F303-007 New pragma Wide_Character_Encoding (2006-03-28)

  This configuration pragma (which can appear anywhere a pragma is permitted),
  allows specification of the encoding method for wide [wide] characters that
  will be subsequently recognized. The single parameter is an identifier which
  is one of: HEX UPPER SHIFT_JIS EUC UTF8 BRACKETS or it is a character literal
  corresponding to the switch character used with -gnatW (e.g. 8 for UTF8).

NF-505-F224-027 Improved handling of Address clauses (2006-03-22)

  Many unnecessary run-time checks for correct alignment of address clauses
  are eliminated in cases where the compiler can tell that the alignment is
  guaranteed to be correct. In addition, more warnings are given for cases
  where the alignment is not guaranteed to be correct, and a new warning is
  given on an attempt to overlay a smaller variable with a larger one.

NF-505-F221-028 Debugger removes useless frames in backtrace (2006-03-01)

  When printing the call stack inside an Ada task, the debugger now by default
  stops the stack trace at the level corresponding to the task in the source
  program, and avoids displaying additional levels corresponding to internal
  book keeping in the run time. The full complete backtrace can still be
  printed by using the gdb command "set backtrace past-main".

NF-505-F219-006 Better tracking of values within loops (2006-02-20)

  Current values of variables are now tracked within a loop body, improving
  the quality of code for some loops.

NF-505-F219-004 Tracking of while condition information (2006-02-24)

  The condition in a while loop is now used to optimize the body of the loop.
  For instance, if the while condition is X /= null, then we know that we do
  not need to do access checks for X within the loop body in some cases.

NF-505-F217-021 Better diagnostics on illegal operators (2006-02-24)

  When there is no valid interpretation for an operator in an expression, the
  compiler used to report only that the operands were incompatible with the
  operator. The compiler  now examines whether the addition of a use_clause
  to the context might make  some user-defined operators use-visible, and
  therefore make the expression legal.

NF-505-F215-040 New function GNAT.OS_Lib.Pid_To_Integer (2006-03-05)

  A new function is added in package GNAT.OS_Lib:
      function Pid_To_Integer (Pid : Process_Id) return Integer;
  This function is useful for hash functions for type Process_Id
  or to compare Process_Id values.

NF-505-F215-003 Improved message for illegal static expressions (2006-02-18)

  When a static expression fails a constraint check (and is thus illegal), the
  error message now talks about failing a constraint check, rather than the
  previous behavior of talking about raising constraint error (which caused
  some confusion, since the program was illegal and could not be executed).

NF-505-F213-031 Validity checking for conversions/qualifications (2006-02-14)

  The operand validity checking option (-gnatVo, also included in -gnatVa) now
  causes validity checks to be generated for type conversions and qualified
  expressions. Previously there was no way to ensure generation of such checks.

NF-505-F213-014 Partial support for Ada 2005 features in gnatpp (2006-03-10)

  A new -gnat05 option is added to gnatpp. When called with this option,
  gnatpp can process Ada sources containing some Ada 2005 features:
    - overriding indicators
    - null subprograms
    - interface types
    - generalized anonymous access types
    - null exclusion
    - tagged incomplete types
    - limited aggregates ('<>' in component associations)
    - subprogram calls given in Object.Operation notation
    - limited and private with clauses
    - raise with string message
  A future gnatpp version will fully support Ada 2005.

NF-505-F213-004 Hardware watchpoints on Tornado PowerPC targets (2006-03-31)

  Hardware watchpoint support has been added to the debugger for Tornado
  PowerPC targets. Support is available for all supported versions of
  Tornado.

NF-505-F211-005 gnatstub can process Ada 2005 units (2006-02-12)

  A new -gnat05 option is added to gnatstub. When called with this option,
  gnatstub can process Ada 2005 library unit declarations and generate body
  stubs for them.

NF-505-F203-012 Warnings on almost-matching signatures (2006-02-03)

  If two subprograms have the same name and differ only in that one of them
  has an access parameter, and the other has a parameter of a general access
  type with the same designated type as the same position in the signature,
  a positional call to either will be ambiguous. GNAT emits a warning on the
  second subprogram declaration in this situation.

NF-505-F130-021 Improved warnings for redundant use clauses (2006-01-31)

  GNAT was warning on use clauses that are only partly redundant, which is
  unhelpful. This warning is now suppressed. GNAT still warns on use clauses
  that are fully redundant (scope of one use clause entirely contains the
  scope of another).

NF-505-F123-006 New validity checking switch for components (2006-04-03)

  A new validity checking switch (-gnatVe/E) allows turning on/off validity
  checks for assignments to elementary components of records and arrays. By
  turning off such checking, the semantics of individual component assignments
  become the same as for entire record or array assignments (where Ada
  specifies that the values be copied without validity checking).

NF-505-F122-006 New specific-message form of pragma Warnings (2006-04-18)

  A new form of pragma Warnings (On|Off, string-pattern), can be used to
  suppress warning messages whose text matches the given string pattern.

NF-505-F115-003 New warning on deleted conditional code (2006-04-21)

  A new warning switch (-gnatwt/-gnatWT, WARNINGS=[NO]DELETED_CODE in VMS)
  causes new warnings for code in conditionals (IF and CASE statements) that
  is detected to be dead code which cannot be executed, and which is removed
  by the front end. This warning is off by default, and is not turned on by
  -gnatwa (WARNINGS=ALL), it has to be turned on explicitly. This may be useful
  for detecting deactivated code in certified applications.

NF-505-F112-035 Interspersing of source in expanded source listing (2006-05-08)

  The switch -gnatL (/INTERSPERSE_SOURCE in VMS) used in conjunction with
  -gnatG (/EXPAND_SOURCE) or -gnatD (/XDEBUG) causes the original source
  lines to be interspersed in the listing of generated code. These original
  source lines are listed as comments, with the relevant line number.

NF-505-F112-023 Identification of implicit run time calls (2006-01-14)

  In the output of -gnatG (or the file generated by -gnatD), an implicit call
  to a run-time support routine is now clearly identified by prepending a $
  to the subprogram name. This provides improved support of the documentation
  requirement in RM H.3.1(9).

NF-505-F112-003 gcore debugger command improvement on HP/UX (2006-01-12)

  There was a limitation in the gcore debugger command on HP/UX which would
  sometimes cause the debugger to save the core dump in a file that is
  different from the file specified by the user. This is due to a limitation
  of certain HP/UX kernels. This command has been enhanced to always save the
  core dump in the expected file.

NF-505-F111-025 Invalid EUC codes now raise an exception (2006-01-14)

  The attempt to convert wide characters to EUC form now raises an exception
  (Constraint_Error) if the wide character is not in the appropriate range of
  allowed ECU representable values.

NF-505-F111-024 Warning for suspicious string indexing (2006-04-09)

  If an unconstrained string parameter is index using a literal, or S'Length,
  a warning is generated that the code is improperly assuming a low bound of
  one (which will for example not be true if a slice is passed). This warning
  can be turned off with -gnatwW, or by providing an explicit pragma Assert
  that the low bound is guaranteed to be one.

NF-505-F111-016 Less warnings for unknown attributes and packages (2006-03-01)

  When parsing project files, warnings are no longer issued for unknown
  attributes (but errors are still issued for unknown attributes related
  to the tool used) or for unknown packages when in quiet mode.

NF-505-F109-016 Pragma Unreferenced can be used for with'ed units (2006-04-21)

  It is now allowable to use pragma Unreferenced in a context clause, where
  its arguments are names of program units in previous WITH clauses (similar
  to the usage of pragma Elaborate_All). The effect is to suppress warnings
  that the corresponding unit is not referenced.

NF-505-F104-025 Space allowed between -I and directory (2006-01-28)

  One or several spaces are now allowed between the switch -I and a directory
  path when invoking the compiler. It is no longer necessary to have the
  directory path immediately after -I.

NF-505-F104-006 ASIS revision for Ada 2005 is started (2006-01-05)

  The ASIS interface packages now contain proposals for ASIS revision for
  Ada 2005. Note that new entities added to the ASIS interface may cause
  problems for existing ASIS 95 applications. For more details, see file
  asis-2005-transition.txt in the top level directory of the ASIS source
  distributions.

NF-505-EC31-001 Pragma Ada_2005 is synonym for Ada_05 (2006-01-04)

  A new pragma Ada_2005 is introduced which is a synonym for the existing
  Ada_05 pragma (which is still recognized).

NF-505-EC29-010 Improved error message for must-be-overridden (2006-01-06)

  When a subprogram must be overridden, the whole chain of aliased subprograms
  is traced, and a message is printed or each.  This is useful in understanding
  where the subprogram came from. This had already been done for Ada 2005 mode,
  and is now present in Ada 95 mode.

NF-505-EC13-012 Pure_Function does not imply Pure (2005-12-25)

  If the pragma Pure_Function is applied to a library function unit, then it no
  longer implies that the function is Pure in the categorization sense. This is
  more consistent with the use of this pragma within a package.

NF-505-EC06-014 New restriction: No_Dispatching_Calls (2006-02-01)

  This restriction ensures at compile time that the code generated by the
  compiler has no dispatching calls. The use of this restriction allows the
  safe use of tagged record extensions and membership tests to write code
  that does not have dispatching calls.

NF-505-EB28-001 Windows 2000/XP priority mapping improvement (2006-01-05)

  On Windows 2000/XP there are 16 priority levels available. The priority
  mapping table has been adjusted to take advantage of all priorities. The
  previous implementation was mapping the Ada 31 priorities to the only 7
  priority levels available on Windows NT4.

NF-505-EB25-009 Warning messages always unconditional (2006-02-03)

  Warning messages issued by the compiler are always unconditional, that is
  to say they are never suppressed even if another message has already been
  issued at the same spot.

NF-505-EB18-023 gcore command implemented in HP/UX debuggers (2006-01-04)

  The gcore command has been implemented in the pa-hpux and ia64-hpux
  debuggers. It produces a core dump of the program being debugged.

NF-505-EB03-021 GNAAMP folds arithmetic for 16 and 32-bit operands (2006-03-22)

  The GNAAMP compiler's peephole optimizer has been extended to perform folding
  of arithmetic operations involving 16-bit and 32-bit literal operands. This
  applies to both signed and unsigned operations for add, subtract, multiply,
  divide, mod, and rem.

NF-505-E917-001 Function call implemented in ia64-hpux debugger (2005-12-30)

  The ia64-hpux debugger is now capable of calling a function in the program
  being debugged.

NF-505-E407-013 Enhanced version of pragma Interface (2006-04-16)

  The Interface pragma has been enhanced pragma so that it is now exactly the
  same as pragma Import syntactically and semantically (except for the name).
  This is an upwards compatible change. The remains upwards compatible with the
  Ada 83 version of Interface, and also upwards compatible with some Ada 83
  extended versions of this pragma that allowed more than two arguments.

NF-505-DA18-006 New style option for checking IN mode arguments (2006-01-09)

  A new style checking option -gnatyI (in VMS MODE_IN) checks that default
  IN mode arguments do not include the keyword IN.

NF-505-D812-002 GNAT.Calendar.Time_IO.Value (2006-05-08)

  New function which parses and extracts an Ada.Calendar.Time value from an
  input String. The supported formats are as follows:

    yyyy*mm*dd hh:mm:ss  - Delimiter '*' is either '-' or '/'
    yyyy*mm*dd           - The time of day is set to 00:00:00
      yy*mm*dd hh:mm:ss  - Year is assumend to be 20YY
      yy*mm*dd           - The time of day is set to 00:00:00
               hh:mm:ss  - Date is the current date

NF-505-D805-003 Kill Default_Bit_Order constant condition warning (2006-04-09)

  A pragma Warnings (Off, Default_Bit_Order) has been added to all versions
  of System, so that you will never get a constant condition warning from
  a reference to this switch if warnings are on.

NF-505-C204-004 Stack checking on 64-bit SPARC/Solaris (2006-02-04)

  Stack checking (enabled by -fstack-check) has been implemented on the
  64-bit SPARC/Solaris platform.

NF-505-8119-003 New error/warning message output format option (2006-04-15)

  A new switch -gnatjnn reformats error and warning messages so that a
  message and all its continuation lines are treated as a unit (and only
  count as one warning or error), and are reformatted so that no line is
  longer than nn characters.
