======================================================
GNAT 5.04 NEW FEATURES LIST Current as of Apr 10, 2006
======================================================

Copyright (c) 2004-2006, AdaCore

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

NF-504-F319-002 32-bit Convention C pointers on VMS (2006-03-28)

  For VMS 64-bit systems, there is an issue of the appropriate default size
  of C convention pointers in the absence of an explicit size clause. The HP
  C compiler can choose either 32 or 64 bits depending on compiler options.
  With this feature, GNAT chooses 32-bits rather than 64-bits in the default
  case where no size clause is given. This proves a better choice for porting
  32-bit legacy applications. This feature is only available in 5.04a1.

NF-504-EC22-005 Complete task debugging support implemented on AIX (2005-12-22)

  The debugger now provides full support for debugging tasks and threads on
  AIX. It is now possible to switch to a different task in the program being
  debugged.

NF-504-EC20-002 No_Wide_Characters no longer partition-wide (2005-12-20)

  The restriction No_Wide_Characters is no longer partition-wide. It applies
  only to those units compiled explicitly with this restriction. This seems
  more useful in any case, and it is particularly important now that Ada 2005
  adds Wide_String references in Ada.Exceptions.

NF-504-EC12-030 Better Storage_Size support on Windows XP (2005-12-14)

  On Windows XP it is possible to implement the pragma/attribute Storage_Size
  to be conformant with the RM by taking advantage of a new option in the
  CreateThread Win32 API. So on Windows XP Storage_Size properly reserve the
  specified amount of stack space for the thread.

NF-504-EC12-024 Controlling the default task stack size (2005-12-16)

   The binder switch -dnnn sets the value of the default primary task stack
   size, in a manner similar to the -Dnnn switch for the secondary stack.

NF-504-EC12-013 ASIS and ASIS-based tools clearly reject Ada 2005 (2005-12-17)

   Since ASIS does not support Ada 2005 features at the moment, a check
   is added to ASIS and ASIS-based tools (gnatstub, gnatelim, gnatmetric,
   gnatpp and gnatcheck) to detect and to reject Ada units compiled
   with '-gnat05' or containing Ada 2005 features

NF-504-EC09-025 Pragma Unreferenced for accept formals (2005-12-27)

   Pragma Unreferenced can be used within a DO-END group following an accept
   in which case it applies to the formals of that particular accept. In fact
   this always worked, but is now official and documented.

NF-504-EC08-011 Allow multiple arguments for No_Return pragma (2005-12-09)

  The No_Return pragma now allows a sequence of one or more procedure names.
  This extension makes the implementation compatible with the Ada 2005
  definition of this pragma found in AI-329.

NF-504-EC07-025 Check on No_Return consistency for overriding (2005-12-08)

  If a dispatching procedure has a No_Return pragma and is overridden, then
  the overriding procedure is now required to be No_Return, so that dispatching
  calls to the procedure get a consistent view. This is an Ada 2005 feature
  (AI 414) that has been back ported to Ada 95 mode.

NF-504-EC05-007 Improved Expanded_Name output for wide characters (2005-12-05)

  When wide (or wide wide) characters are used in identifiers, the output of
  Expanded_Name now outputs properly encoded strings that represent these wide
  characters, using the same encoding as was used in the source program.

NF-504-EB24-018 Enhancements to pragma Debug (2005-11-24)

  Pragma Debug now allows a two argument form in which the first argument is a
  conditional expression. The procedure call which is the second argument is
  made only if debug pragmas are enabled, and the condition evaluates to True.
  In addition, the procedure call is wrapped in a block, so that overhead from
  the call only occurs if the condition is true.

NF-504-EB21-008 Increased default maximum line length (2005-11-28)

  The maximum line length accepted by GNAT by default has been increased for
  255 to 32766 characters. A more restrictive length can still be enforced
  using the existing style check switch -gnatyM.

NF-504-EB21-005 Better msg for bad style check option (2005-11-24)

  Clear specific error messages are now given for bad style options instead of
  a general often unhelpful "bad style check" message.

NF-504-EB15-018 Better warning message when source not found (2005-12-05)

  When a file specified as a spec or body of a unit in a package Naming
  cannot be found in the project source directories, the file name is
  specified in the warning message.

NF-504-EB11-009 GDB warns on non-matching executable (2005-11-11)

  The debugger has been enhanced to detect the situations where the name of the
  executable used to generate a core file does not match the name of the
  executable being debugged, and will warn the user of a potential problem.

NF-504-EB10-004 AI-441 Null-exclusion under Ada95 mode (2005-11-10)

  This AI allows the use of the "not-null" qualifier under Ada95 mode because
  all access parameters are "not null" in Ada 95. In addition, the first
  parameter of the stream attributes is now explicitly declared to be a not
  null access type. Further information can be accessed at
  www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00441.TXT.

NF-504-EB09-009 Output internal types in -gnatG output (2005-11-26)

  The pseudo-Ada output generated by -gnatD or -gnatG now includes listing of
  internal types for which no full declaration was generated. Previously,
  references to these types appeared, without any declarations.

NF-504-EB04-020 Unsupported task switch message in debugger (2005-10-04)

  The debugger now prints an error message when attempting to perform a task
  switch in the debugger while debugging from a core file, which is not
  supported. This prevents any confusion about the result of the action.

NF-504-EB04-016 Unused subprogram/data elimination (2005-12-22)

  With the GNU/Linux x86 native compiler, it is now possible to automatically
  eliminate at link time the unused subprograms and datas from linked objects.
  This needs objects compiled with -ffunction-sections and -fdata-sections
  option, and the linker being called with --gc-sections option. The gnat
  library is now compiled with these options to allow such unused code
  elimination.

NF-504-EB04-007 New pragma Complete_Representation (2005-11-26)

  A new GNAT pragma, Complete_Representation has been implemented. This pragma
  must appear with no arguments immediately within a record representation
  clause. The effect is to generate an error is any of the components or
  discriminants of the record type is missing from the list of component
  clauses.

NF-504-EB03-006 New warning for ignored pragma Pack for records (2005-11-26)

  If a complete record representation clause is given for a record, which has
  component clauses for every component, then pragma Pack has no effect and is
  ignored. A warning is now generated for a useless pragma Pack in this case.

NF-504-EB02-022 Pragma Inline_Always effective after body (2005-11-04)

  If a subprogram body has no previous spec, and it is immediately followed by
  a pragma Inline_Always, then all calls to the subprogram will be
  unconditionally inlined by the front-end. This approach is consistent with
  the implementation suggestion of AI-309, and is a generally useful
  optimization.

NF-504-EA27-002 Obsolescent pragma applies to packages (2005-10-29)

  A pragma Obsolescent may now be used as a program unit pragma within the
  declarative part of a package. A client with'ing a package with such a pragma
  is considerd to violate pragma Restrictions (No_Obsolescent_Features), and
  warnings will be issued if -gnatwj mode is active.

NF-504-EA26-006 New verbosity levels for gnatmake (2005-10-27)

  Three new switches are added to gnatmake: -vl (verbosity Low), -vm (verbosity
  Medium) and -vh (verbosity High, equivalent to -v). For each verbosity level,
  potentially fewer lines are output than for the nest higher verbosity level.

NF-504-EA21-019 Warnings for dubious comparisons (2005-10-23)

  If two quantities are compared using >= or <= and the compiler can tell that
  only = is possible, it will warn that the > or < condition is impossible if
  the warn on constant conditionals option (-gnatwc or -gnatwa).

NF-504-EA20-003 Improved exception message for Host_Error (2005-10-20)

  When GNAT.Sockets.Get_Host_By_Name/Get_Host_By_Addr raises an exception, a
  meaningful explanatory message is now attached to the exception occurrence
  giving an indication of the cause of the error.

NF-504-EA19-003 New form allowed for -gnatm switch (2005-10-19)

  An equal sign may now optionally precede the numeric value in a -gnatm
  switch, so that for example, you can write either -gnatm2 or -gnatm=2.

NF-504-EA15-005 Improved efficiency for Vax Float (2005-10-16)

  On OpenVMS, if pragma Float_Representation (Vax_Float) is used, then implicit
  generated code was correct, but overused Vax_Float formats for implicit
  conversions and other operations. This is now corrected, improving the
  efficiency of programs using this pragma.

NF-504-EA14-028 Improved warnings on unused generic formals (2005-10-16)

  Generic formal parameters of generic subprograms are now flagged if they
  are not referenced in the body of the subprogram.

NF-504-EA12-015 AltiVec binding integration (2005-11-21)

  A soft emulation of the PowerPC AltiVec extension has been added to the GNAT
  library under the GNAT.Altivec hierarchy. This provides a convenient
  interface to manipulate vectors. The hard version of the binding is provided
  as a separate package.

NF-504-EA06-017 Static Elaboration model works with -gnatp (2005-10-10)

  As documented, pragma Suppress (Elaboration_Check) can be used to suppress
  static elaboration checking, even though no run-time checks are involved. An
  unintended consequence was that -gnatp and Suppress (All_Checks) disconnected
  static elaboration processing, since they implied suppression of
  Elaboration_Check. The compiler has been modified so that it is no longer the
  case that the use of -gnatp or Suppress (All_Checks) has any effect on
  elaboration order (run time checks for the dynamic elaboration model will
  still be suppressed).

NF-504-E928-008 Improved warning control via pragma (2005-10-02)

  Pragma warnings can now be used to selectively turn on and turn off specific
  warnings (using the same set of warning characters available in command line
  options).

NF-504-E922-015 Improved message for complex ambiguity (2005-10-01)

  If an operand of a concatenation is a call to a function that returns an
  array, and the function can be called without parameters, the operation is
  ambiguous because the call can also be interpreted as an indexing of the
  result of a parameterless call, and two concatenation operations are
  available (array/array, array/component). The error message for this case now
  describes precisely the two possible interpretations.

NF-504-E922-012 ALI files and lib files in different directories (2005-09-22)

  A new library attribute Library_ALI_Dir is defined for library project files
  to specify a directory where the ALI files are copied. When this attribute
  is not defined, ALI files are copied to the directory specified in attribute
  Library_Dir.

NF-504-E912-001 Switch for gnatprep to replace in comments (2005-10-04)

  A new switch -C for gnatprep (/REPLACE_IN_COMMENTS for OpenVMS) causes
  preprocessing to scan comments, and do normal replacements on any $symbol
  occurrences within the comment text (this is particularly useful for
  structured comments, e.g. in SPARK).

NF-504-E910-001 Warning for select/else/delay (2005-09-28)

  The usage "select .. else .. delay .. end select" is very peculiar. Almost
  certainly the programmer intended to say "select .. or .. delay". A warning
  is now generated if the select/else/delay sequence is encountered.

NF-504-E906-016 Improved string for Expression_Error (2005-10-03)

  When using GNAT.Regpat, the Expression_Error exception may be raised when
  parsing an invalid regular expression. More details on the invalidity is now
  provided as part of the message associated with the exception propagation.

NF-504-E830-023 Normalized parameter specifications in ASIS (2005-09-14)

  ASIS can now handle normalized forms of subprogram parameter specifications
  without any limitations.

NF-504-E830-017 AAMP Text_IO calls _PUT_CHAR and _GET_CHAR (2005-08-30)

  On the AAMP target only, the low-level I/O routines for putting and getting
  single characters now make calls using the link names _PUT_CHAR and
  _GET_CHAR, which are symbolic names defined in template.lec. This allows
  developers to easily substitute environment-specific I/O routines.

NF-504-E828-004 Debugger option to print arrays with indexes (2005-10-10)

  The debugger has been enhanced to provide the option of printing the indexes
  of each element when printing an array. This option is controllable using the
  "set print array-indexes" command.

NF-504-E814-001 Two argument form of Float_Representation (2005-08-14)

  A specific floating-point type name may appear as an optional second argument
  for pragma Float_Representation, in which case the pragma may appear within a
  declarative part and applies only to the named type. This feature has
  actually always been implemented, but until now, was not documented.

NF-504-E812-008 Remove unnecessary run-time checks (2005-09-13)

  The front end now removes some unnecessary access and range checks in code
  generated by the expander for the assignment of tagged or controlled objects,
  for which it is known by construction that they will always pass.

NF-504-E806-004 Remove unnecessary run-time checks (2005-08-07)

  The front end now removes some unnecessary access and zero divide checks,
  based on analysis of short-circuited forms. For example, the expression "N=0
  or else 10/N=7" does not require a zero divide check.

NF-504-E729-011 Better messages for wrong categorization (2005-08-20)

  A clearer more specific error message is now generated for the common cases
  of a pure unit attempting to with non-pure package, or a preelaborated unit
  attempting to with a non-preelaborated package.

NF-504-E728-003 Line length style check for wide chars (2005-07-29)

  The style check for maximum line length has been changed to count characters
  instead of bytes, making it useful for the wide character encodings.

NF-504-E726-008 Enclosing_Entity now fully qualified (2005-07-27)

  The name returned by GNAT.Source_Info.Enclosing_Entity is now fully qualified
  using periods where possible (this is not always possible, notably in the
  case of entities appearing in unnamed block statements.)

NF-504-E722-006 New warning for ignored pragma Pack for arrays (2005-07-23)

  The Ada standard is not clear on the issue of whether pragma Pack can
  override an explicitly given component size. The RM is unclear as to whether
  such overriding is permitted, required, or disallowed. The best choice seems
  to be to respect an explicitly given component size. A warning is generated
  for the ignored Pack pragma except in cases where it is clear that the
  ignored Pack pragma is simply confirming the given component size.

NF-504-E706-024 Warning on failure to short circuit (2005-08-07)

  Warnings are now generated for some cases where it is pretty obvious that a
  non-short-circuited conditional form has been incorrectly used. For example
  in the expression "P=null or P.all=3", it is clear that the "or" here should
  be "or else".

NF-504-E706-021 Better tracking of null values (2006-01-02)

  The compiler now does a much better job of tracking values that are known to
  be null. This improves the code in some cases, and also allows the generation
  of more warnings in cases where the compiler can tell that an access check
  will fail.

NF-504-E706-011 New pragma Debug_Policy (2005-07-11)

  A new configuration pragma Debug_Policy, which takes one of two arguments
  Check or Ignore, controls whether Debug pragmas are active, in a manner
  exactly analogous to the use of the Ada 2005 pragma Assertion_Policy to
  control whether Assert pragmas are active.

NF-504-E706-006 New stack checking implementation (2005-12-20)

  Stack checking has been reimplemented for most native platforms and selected
  embedded platforms. The new implementation is more efficient and does not
  impose a cap on the size of the static frame of functions.

NF-504-E629-006 gnatpp option for 'IS' in subprogram body (2005-07-05)

  A new option (--no-separate-is) is added to gnatpp. If this option is set,
  gnatpp tries not to place the 'IS' keyword on a subprogram body on separate
  line in case if the subprogram specification occupies more then one line

NF-504-E623-020 Assignment of aggregates in GDB (2005-12-07)

  GDB now allows aggregates on the right-hand sides of assignments to
  arrays and records. Both named and positional aggregates are supported.

NF-504-E620-007 Warning on dubious use of gnatbind -p (2005-08-20)

  The use of the -p gnatbind switch makes sense only if at least some unirts in
  the partition were compiled with the dynamic elaboration model (-gnatE). A
  warning is now given if this switch is used and all units within the
  partition were compiled with the default static elaboration model.

NF-504-E616-013 Auto-init of SALS with constructors (2005-06-30)

  Stand-Alone Libraries for most platforms, except VMS, are now
  auto-initialized using the constructor mechanism. This is achieved by the
  binder using new internally generated pragmas Linker_Constructor and
  Linker_Destructor.

NF-504-E613-007 New function GNAT.Expect.Get_Command_Output (2005-06-16)

  This new function provides a convenient way of executing a command and
  obtaining its output as a string.

NF-504-E606-018 gnatpp option to control output file format (2005-06-19)

  A new option ('--eol') is added to gnatpp to set the line ending format of
  the result file(s) containing the reforatted source(s). It is possible to
  specify DOS (CR LF) or Unix (LF) line endings.

NF-504-E531-004 Support for socket I/O timeouts control (2005-10-03)

  The Get_Socket_Option/Set_Socket_Option interface in GNAT.Sockets now
  provides two new options, Send_Timeout and Receive_Timeout, corresponding to
  the SO_SNDTIMEO and SO_RCVTIMEO setsockopt options. This allows getting and
  setting the output and input timeout values for a socket.

NF-504-E520-013 Improved Address_To_Access_Conversions (2005-05-24)

  System.Address_To_Access_Conversions is often used to create access values
  where the type of the target does not match the access type. Strictly
  speaking this is incorrect since the access type value is invalid. When
  compiling at -O2, the compiler may generate code that has unexpected results
  as a consequence. The official way to deal with this is to use
  -fno-strict-aliasing, or the corresponding pragma, or better to use unchecked
  conversion on the target values. The new feature here is that the compiler is
  now somewhat friendlier in that the unexpected optimization is inhibited by
  default even in -O2 mode in most common cases of this usage.

NF-504-E519-007 gnatdll handles non standard file extension (2005-05-25)

  gnatdll was working only with DLLs having the extension ".dll". It has been
  enhanced to handle non standard file name extension (like .cpl for example).
  So gnatdll can now create DLLs or import libraries to bind against DLLs with
  non standard file name extension.

NF-504-E510-020 Enhanced variants of Non_Blocking_Spawn (2005-05-20)

  In package GNAT.OS_Lib, two new versions of the function Non_Blocking_Spawn
  have been added. These functions can redirect the output from the spawned
  program into either a file descriptor or a file.

NF-504-E510-009 New warning for Ada 2005 compatibility (2005-05-30)

  Warnings about Ada 2005 compatibility issues (for example the use of new
  keywords like Interface) are output by default. A new warning option -gnatwY
  (in VMS this is WARNINGS=NOADA_2005_COMPAIBILITY) can be used to turn these
  warnings off selectively.

NF-504-E509-004 New constant Sockets.Broadcast_Inet_Addr (2005-05-09)

  A new constant for type GNAT.Sockets.Inet_Addr_Type has been added to
  GNAT.Sockets, corresponding to the standard broadcast address
  255.255.255.255.

NF-504-E506-013 Better exception support on Linux (2005-05-09)

  Added the required support for unwinding more reliably through signal
  handlers in linux distributions with recent versions of NPTL. It allows
  exception propagation through signal handlers when using the zero cost
  exception mechanism.

NF-504-E504-006 Map signals into exceptions on x86_64-linux (2005-05-09)

  Added the required machinery for translating signals (SIGSEGV, SIGFPE, etc.)
  into their corresponding Ada exceptions on x86_64 linux targets.

NF-504-E429-011 Check for improper use of Inline_Always (2005-05-03)

  The use of 'Address or 'Access on a subprogram that is marked with pragma
  Inline_Always makes no sense, since the objective of this pragma is to allow
  the body of the subprogram to be eliminated. A check is now made for such
  improper usages.

NF-504-E427-002 Table performance in GNAT.Spitbol improved (2005-10-30)

  The performance of the hashing algorithm used in the implementation of the
  Spitbol table function has been improved.

NF-504-E422-018 AAMP enhancement for static discriminated records (2005-12-05)

  On the AAMP target, the compiler now generally uses static rather than
  dynamic allocation and addressing for records with discriminant-dependent
  components when discriminant constraints are static.

NF-504-E421-012 New package Ada.Wide_Characters.Unicode (2005-04-22)

  This package provides unicode classification functions for type
  Wide_Character. Strictly speaking this is an Ada 2005 package (because the
  Ada.Wide_Characters dummy package is defined for Ada 2005), but it seems
  reasonable to make it available in Ada 95 mode as well, since it deals only
  with type Wide_Character.

NF-504-E420-024 Ada 2005 enhancement for pragma Obsolescent (2005-04-21)

  The Obsolescent pragma now takes an optional second argument which, if
  present, must be Ada_05. If this argument is present, the obsolescent
  indication is only applicable if compiling in Ada 2005 mode.

NF-504-E420-023 Obsolescent pragma and restriction (2005-04-21)

  If a call is made to a subprogram for which a pragma Obsolescent has been
  given, and at the point of call the restriction No_Obsolescent_Features is in
  effect, this is now considered to be a violation of the restriction. This
  seems more consistent behavior.

NF-504-E420-015 Backtrace support for x86_64 linux (2005-05-09)

  Added support for both symbolic and non-symbolic backtraces, including
  backtraces on exception occurrences, for x86_64 linux targets.

NF-504-E416-002 New style check for unnecessary blank lines (2005-04-23)

  A new style check switch has been implemented that checks for unnecessary
  blank lines, defined as blank lines at the end of the file, or two more more
  blank lines in a row. The switch is -gnatyu (UNNECESSARY_BLANK_LINES in VMS).
  This is not included by default in -gnaty, but it is now included in -gnatg
  (so compiler sources must obey this restriction).

NF-504-E414-016 Remove -f switch for gnatbind (2005-04-18)

  The gnatbind -f switch causes elaboration checking to be ignored in the
  binder. It has been undocumented and deprecated for some time (the proper way
  to achieve this is to use pragma Suppress, which makes it much clearer that
  checks are being suppressed). This switch has now been permanently removed.

NF-504-E413-018 Exponentiation available with aamp5-small library (2005-05-25)

  On the AAMP target only, the run-time library units that support
  exponentiation operations are now included in the aamp5-small library.

NF-504-E408-003 Detect bounded error from interrupt handler (2005-04-11)

  When using the Ravenscar run times, calls to Current_Task from interrupt
  handlers are detected as bounded errors, and hence Program_Error is raised.

NF-504-E407-001 Clearer message for configurable run times (2005-04-10)

  When trying to use a predefined run-time unit which has been both excluded
  from the run time and forbidden by pragma Restriction, the corresponding
  restriction violation message is generated.

NF-504-E405-008 Ravenscar Synchronous_Task_Control (2005-04-26)

  The Ada.Synchronous_Task_Control package was implemented using a protected
  object with two entries, which is not allowed by the Ravenscar profile. It
  has been changed so that the low-level synchronization primitives provided by
  the operating system are used, and hence the new implementation is more
  efficient as well as being compatible with the Ravenscar run-time.

NF-504-E330-016 Default secondary stack for Ravenscar (2005-04-02)

  A simple default implementation of a secondary stack allocation function
  is now provided for single-threaded under the Ravenscar profile.
  This default function is used only if no user-defined implementation is
  provided. This change only affects the Ravenscar run-times.

NF-504-E330-002 Better msg for out of order pragma args (2005-04-12)

  It is easy to assume that the use of pragma argument identifiers allows
  reordering of arguments, as in subprogram calls, but this is not the case. A
  new error message clearly indicates when pragma arguments are given in the
  wrong order.

NF-504-E322-007 New warning for DOS line terminators (2005-03-26)

  A new warning switch -gnatyd is implemented which causes warnings to be
  generated for any line terminator that is other than a single LF (and in
  particular DOS line ending sequences (CR/LF) are flagged. This is part of the
  default set of -gnatg switches for the GNAT sources, but it is not part of
  the standard -gnaty default set.

NF-504-E318-016 Clearer message for raise stopping copy (2005-03-20)

  The message warning that a raise statement results in an abnormal return
  causing an assignment to a pass-by-copy formal to have no effect can be
  misleading if the raise is handled locally. The message now says that it "may
  result" in an abnormal return, resulting in less confusion in the rare case
  where this is a false positive warning.

NF-504-E318-008 Improved message for illegal conversions (2005-03-18)

  When an illegal conversion between non-subtype-conformant local
  access-to-subprogram types is attempted, the error message now includes a
  specific indication of the cause of the non-conformance.

NF-504-E318-002 External ref defaults may be expressions (2005-03-22)

  Default for external references (the second optional argument of built-in
  function "external" in project files) may be string expressions. They are no
  longer restricted to literal strings.

NF-504-E317-022 VMS symbol file same as reference file (2005-03-21)

  On VMS, the limitation that, for Stand-Alone Libraries, the symbol file need
  to be different from the reference symbol file has been removed.

NF-504-E317-019 New warning for bad fixed-point value (2005-03-20)

  If the value of a static fixed-point expression is not multiple of the Small
  value, then the result is dependent on the implementation which is free to
  choose either near value. GNAT always chooses the nearer value, but it is
  good practice to make sure that such values are exact multiples of Small. A
  new warning -gnatwb (in VMS this is /WARNINGS=BAD_FIXED_VALUES) triggers
  warnings when fixed-point values are not a multiple of the small value.

NF-504-E227-007 Better msg for generic private child (2005-03-20)

  A clearer error message is now generated for an (illegal) attempt to declare
  a generic private child package.

NF-504-E224-029 Multiple project trees for project manager (2005-03-04)

  The Project Manager is now able to parse and process several project trees
  and to keep these project trees in memory at the same time. This will enable
  GPS to have several project trees in memory and to switch between these
  different project trees.

NF-504-E221-022 Large bit packed arrays can be unaligned (2005-03-06)

  If a packed array has an element size that is a power of two (1,2,4,8,16,32),
  then a component of this type can be positioned at any arbitrary bit boundary
  in a record. Previously, such components had to be byte aligned.

NF-504-E203-003 Better record rep clause layout in gnatpp (2005-02-08)

  Record representation clauses are now reformatted by gnatpp in a manner that
  is more consistent with record type declarations. First, the notion of
  compact/uncompact layout is expanded to record representation clauses.
  Second, the alignment of 'AT' keywords in component clauses is added.

NF-504-E203-002 Simplifying gnatpp dictionaries (2005-02-12)

  The semantics and the format of the pretty-printer dictionary entries are
  simplified and made compatible with the format of GPS/GLADE case exception.
  Now the only format for subwords is *FOO*, and it covers all the possible
  cases of using 'FOO' as a subword in an identifier.

NF-504-E131-016 Static elab for generic instantiation (2005-09-25)

  Previously, any generic instantiation generated an indication of
  Elaborate_All desirable. But that is not needed for a subprogram
  instantiation, since in this case there is no transitive elaboration issue
  (elaborating the body of a subprogram does nothing other than to make it
  available to be called). The static elaboration model now indicates that in
  this case a pragma Elaborate is all that is required. This allows some cases
  to bind that were previously rejected due to a circularity caused by
  Elaborate_All.

NF-504-E131-004 Output per-file callgraph info (2005-05-17)

  A new GCC switch -fcallgraph-info has been implemented. It makes the compiler
  output callgraph information for the program, on a per-file basis, to
  auxiliary text files that can be easily parsed or viewed.

NF-504-E127-011 Non-symbolic traceback support for ERC32 (2005-02-11)

  The support for non-symbolic traceback (using the -E gnatbind switch) has
  been added to the full run time on ERC32 targets. This switch causes
  traceback information to be stored within exception occurrences.

NF-504-E125-004 Multicast output interface control (2005-10-03)

  The Get_Socket_Option/Set_Socket_Option interface in GNAT.Sockets now
  provides a new option, Multicast_If, corresponding to the IP_MULTICAST_IF
  setsockopt option. This allows the user to get and set the default output
  interface for a multicast socket.

NF-504-E117-004 Pragma Obsolescent for library subprograms (2005-01-18)

  Pragma Obsolescent previously could only be used for a subprogram declared
  within another declarative region, e.g. within a package. Now this pragma can
  also be used for library subprograms.

NF-504-E115-003 Normalize_Scalars chooses better values (2005-01-15)

  Normalize_Scalars now is able to select guaranteed invalid values in more
  cases than was the case previously (see new documentation in GNAT reference
  manual for full details).

NF-504-E114-016 Initialize_Scalars chooses better values (2005-01-15)

  Initialize_Scalars cannot do quite as good a job as Normalize_Scalars in
  choosing invalid values, since the values have to be supplied at bind time
  when less information is available, but improvements have been made to get
  invalid values in more cases. In particular unsigned subtypes of signed types
  now give invalid values where possible.

NF-504-E112-011 Better handling of membership tests (2005-08-21)

  Using a membership test X in Y is a wrong way to test for having an invalid
  representation (here Y is the subtype of X). The compiler can assume tha X is
  valid and elide the test. The proper way to do this is to use the 'Valid
  attribute. The compiler now recognizes such dubious membership tests and
  replaces them with appropriate 'Valid tests, generating warning messages.

NF-504-E106-005 Facilities for setting close-on-exec flag (2005-01-10)

  A new subprogram Set_Close_On_Exec has been added to GNAT.OS_Lib. It allows
  setting the close-on-exec flag on an open file descriptor.

NF-504-E105-002 Better exception support on Solaris (2005-10-05)

  Added the required support for unwinding through signal handlers in new
  Solaris versions. It allows exception propagation through signal handlers
  when using the zero cost exception mechanism.

NF-504-DC31-002 New warning for misaligned objects (2004-12-31)

  The existing warning about objects whose address was incompatible with the
  explicit alignment constraints has been extended. It now also warns when an
  object address is incompatible with explicit or implicit alignment
  constraints on its base type. The run time check is unchanged and
  Program_Error will still be raised when objects are not correctly aligned.

NF-504-DC22-013 Default _APP_GET_TIME in AAMP library (2005-01-04)

  For the AAMP target only, there is now a default dummy version of the
  function _APP_GET_TIME, defined in the AAMP run-time library package
  Mini_RTE.Clock and linked in to all programs. Formerly it was required that
  applications provide an implementation of _APP_GET_TIME in order to use the
  Calendar package; otherwise an unresolved reference would be reported by
  CLINK.

NF-504-DC20-009 Add unit kind to gnatmetric XML output (2004-12-23)

  A new attribute describing the program unit kind is added to the 'unit' tag
  in the XML output generated by gnatmetric.

NF-504-DC20-006 Default exit/return code qualifier (2005-01-12)

  The new GNAT BIND qualifier /RETURN_CODES=VMS is now available for setting
  the default exit status/return code to success. Must be used in conjunction
  with the GNAT LINK qualifier of the same name.

NF-504-DC19-003 Better error msgs in pragma config file (2004-12-26)

  The error messages for bad pragmas in configuration files have been improved
  in three respects: multiple errors are now posted if there are multiple bad
  pragmas, the error flags are posted more accurately, and the error message
  disinguishes the cases of unrecognized pragmas and the use of a
  non-configuration pragma.

NF-504-DC03-023 Task stack usage analysis (2005-11-25)

  It is now possible to display the maximum stack usage for each task in a
  program, simply by using the -u switch when binding the application.

NF-504-DB26-008 Output per-function stack usage (2005-04-10)

  A new GCC switch -fstack-usage has been implemented. It makes the compiler
  output stack usage information for the program, on a per-function basis, to
  auxiliary text files that can be easily parsed.

NF-504-DA22-018 Finalization optimization (2005-01-07)

  Finalization code has been optimized for tasking programs that do not make
  any use of the asynchronous transfert of controls (abort). This optimization
  is especially effective on platforms where access to task specific data is
  not optimized at the system level.

NF-504-DA15-009 Optimized calls to imported subprograms (2005-10-01)

  Calling an imported function or procedure via an access value is now much
  more efficient (it used to be rather expensive due to the use of a stub
  (called a trampoline). This is no longer generated and the call is directly
  to the subprogram.

NF-504-D920-011 Flag use of Ada 2005 reserved words (2005-01-13)

  In Ada-95 mode, the use of "interface", "overriding", and "synchronized" as
  an identifier generates a warning that the identifier will become reserved
  in Ada 2005 (and thus be illegal).

NF-504-D805-004 SAL Auto initialization supported on Windows (2005-05-22)

  Stand Alone Libraries auto initialization is now supported on Windows. There
  is one restriction, the SAL must not contain a library level task. This is
  due to a limitation (no thread can be created from the DllMain entry point)
  imposed by the Windows DLL loader.

NF-504-D630-013 New rule checking tool gnatcheck (2005-11-24)

  A new tool gnatcheck is added to the set of GNAT tools. This is an ASIS-based
  tool that checks its argument sources against a given set of rules. It
  generates compiler-style diagnoses about the detected rule violations and
  also creates a report file. The gnatcheck options allow the user to configure
  the set of rules being checked. The initial release of gnatcheck is a beta
  release. The interface may be changed on the base of the user feedback, and
  the set of checked rules is planned to be extended.

NF-504-D401-009 Better protected type debugging support (2005-09-24)

  The compiler and the debugger have been improved to provide better support
  for debugging protected type subprograms and entries. The debugger now prints
  the decoded name of both subprograms and entries. It is also now possible to
  insert a breakpoint inside an entry by using the entry name.

NF-504-D206-004 New default stack size (2005-12-19)

  On all native platforms, the default stack size for Ada tasks is changed to
  two megabytes. Note that it is now also possible to modify this default stack
  size using gnatbind -d switch.

NF-504-D127-006 New restriction Max_Entry_Queue_Length (2005-05-10)

  This restriction defines the maximum number of calls that can be queued on an
  entry. Violation of this restriction results in the raising of Program_Error
  at the point of the call. This replaces restriction Max_Entry_Queue_Depth.
  The new form is the one intended to be standardized in the new revision of
  Ada. The form Max_Entry_Queue_Depth. is retained as a synonym for back
  compatibility with older versions of GNAT.

NF-504-D102-001 Better msg for non-modified volatile object (2005-09-27)

  Previously, a confusing warning message was given when volatile non-imported
  variable is never modified. The warning advised adding constant, but that's
  wrong in this case, since this would be illegal (RM C.6(13)). The warning is
  now specialized to advise that in this situation volatile has no effect.

NF-504-C617-013 More efficient unbounded string handling (2005-04-23)

  The unbounded string growth factor, used to pre-allocate spaces, has been
  slightly increased to get more efficient append and other similar operations.
  This new version is up to 20% faster than the previous one.

NF-504-C130-019 Better support for signals with tasking (2005-05-18)

  On Unix systems, when using tasking constructs and no signal handling (e.g.
  no use of Ada.Interrupts), the default signal behavior is now observed, as
  was already the case for non tasking applications.

NF-504-BC11-003 Multiple signals supported on Windows (2005-01-20)

  On Windows an application can now recover from multiple signals. This
  enhancement is supported on both exception models (setjump/longjump and
  Zero-Cost). The new signal handling implementation is based on the structured
  exception handling facility in Windows.
