====================================================== GNAT 3.15 NEW FEATURES LIST Current as of Jan 29, 2002 ====================================================== Copyright (c) 2001-2002, Ada Core Technologies This file contains a complete list of new features in version 3.15 of GNAT. A full description of all GNAT features can be found in the GNAT User's Guide and GNAT Reference Manual. NF-315-9727-002 More uniform format for Exception_Information The end of line sequence for the Exception_Information string is now a single line feed character (16#0A#) rather than a CR/LF sequence. This is more consistent with the canonical form of Text_IO files, and more convenient on most targets. NF-315-9726-002 Better message for body for imported subprogram If a body is incorrectly supplied for an imported subprogram, the error message (which used to say simply duplicate body) now points out specifically that a body cannot be supplied for an imported subprogram. NF-315-9722-020 Style_Checks pragma takes effect immediately The style check pragma takes effect immediately after the semicolon (it used to be slightly delayed). This means for example that a Style_Checks (Off); pragma may have spaces at the end of the line without generating an error. NF-315-9821-006 More flexible Storage_Size under Ravenscar 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-315-9718-005 Florist is no longer using ATC constructs Florist is no longer using the "asynchronous transfer of statement" Ada 95 constructs, which means in particular that applications taking advantage of the pragma Restrictions can be compiled using Florist. NF-315-9716-013 ASIS asistant now checks name duplication The ASIS utility Asistant used to silently hide the built-in queries if the variable with the same name was created. It now gives the error message in this case. NF-315-9714-020 Combining of -gnatc/-gnats switches The switches -gnatc and -gnats can be combined with other switches providing that the c or s comes first. A violation of this rule is now diagnosed as a fatal error. NF-315-9712-001 More information for exceptions In most cases, Constraint_Error, Program_Error and Storage_Error exceptions include not only the file name and line where the exception was issued, but also a short message describing the cause of the exception, for example "accessibility check failed". NF-315-9711-008 Better default alignment of small records Records that are known to have a size of 2,4, or 8 bytes, either as a result of an explicit size clause, or the use of a full record representation clause, are by default given a corresponding alignment (e.g. a record of length 4 is given an alignment of 4). This results in much more efficient code, and also allows such types to be specified as atomic. If the previous behavior of defaulting to an alignment of 1 is desired, an explicit alignment clause can be given for the record type. NF-315-9710-017 Large aggregates treated as static If pragma Restrictions (No_Elaboration_Code) is specified, then large static aggregates up to 16 million items long can be treated statically. The common case where this arises is when there is an others clause covering a very large number of elements. NF-315-9709-022 Latin-9 character set now supported Latin-9 (ISO-8859-9) is a minor modification of Latin-1 that excludes certain less frequently used special characters, and introduces the Euro symbol, and some important national letter characters. GNAT now supports the use of Latin-9 in identifiers (with the option -gnati9) and also provides the packages Ada.Characters.Latin_9 (a-chlat9.ads) and the corresponding Ada.Characters.Wide_Latin_9 (a-cwila9.ads) to define the Latin-9 codes. NF-315-9708-006 Interfaces.C_Streams is now preelaborable The package Interfaces.C_Streams has been reimplemented to include the specification of pragma Preelaborate, allowing it to be with'ed from other preelaborable packages. There is no change in the visible interface, other than this categorization status change. NF-315-9707-001 New procedure GNAT.Expect.Close It is now possible to retrieve the exit status of the process when using GNAT.Expect.Close. NF-315-9705-001 SGI debug format now consistent The debug formats for external names in the SGI ports are now consistent with those used in all other ports. Previously there were some inconsistencies (e.g. the use of dots in names instead of double underscores), for the benefit of the Workshop debugger. This change should make the use of gdb more reliable on the SGI IRIX targets. NF-315-9703-005 Initialize_Scalars does not affect warnings The initializations generated by Initialize_Scalars, and also the implicit initialization of packed arrays in some cases, no longer count as initializations for the purposes of generating warnings about use of uninitialized values or variables that are never initialized. This means that more useful warnings are generated in these cases. NF-315-9703-004 New warnings for unreferenced entities The -gnatwu switch now activates additional warnings for some cases that were missed before. First, the occurrence of a subprogram body where there is a separate subprogram spec is no longer considered to be a reference, so if this is the only reference, a warning will be generated. Second, entities in package bodies that are not referenced within the package body (and therefore not referenced anywhere, since package body entities are not visible outside) are now flagged. NF-315-9630-002 New pragma Unreferenced The pragma Unreferenced, which takes one or more local names of entities as parameters, specifies that these entities are deliberately unreferenced. Warnings in -gnatwu/-gnatwf mode will be suppressed, but a warning will be generated if one of these entities is actually referenced. NF-315-9627-001 All files compiled by gnatmake when -k is used When -k is used and there are several files to compile, gnatmake will now attempt to compile all the files. However after the first compilation failure, no binding or linking will be attempted. NF-315-9626-003 Clearer generated output for qualified expr In some cases of code generated by the compiler, qualified expressions were generated but the -gnatD/G output did not parenthesize the expression leading to confusing output. NF-315-9626-002 Glide now supports .gpr project files Glide will automatically recognize and process the new .gpr project files that are used by GNAT. NF-315-9619-015 False constant condition warnings suppressed If a conditional test involves an operand for which warnings have been suppressed (using pragma Warnings Off), then the compiler will suppress constant conditional warnings for the conditional test (when -gnatwc specified). NF-315-9617-005 All files read by gnatmake when -k is used When -k is used, even if the compilation is bad, gnatmake attempts to read the ALI file, if it exists, so that more compilations may be attempted. This is specially useful when -gnatQ is used, because most of the times, the withed units will be correctly put in the ALI file. NF-315-9614-006 Ada.Text_IO.Get_Immediate on VxWorks On VxWorks, Get_Immediate used without the Available parameter doesn't need to wait for a CR/LF to return any more (we now follow the RM implementation advice, see A.10.7(24)). NF-315-9606-001 Linker_Options handled for package body/spec The ALI file now contains separate sections for the package body and spec for Linker_Options. The result is that the binder can do a better job of ordering these (options for the body appear before options for the spec) NF-315-9604-016 Optimization of constant array references If a constant array is decleared and initialized with an aggregate with constant values, then a subscripted reference to this array using a compile time known subscript is now recognized to be compile time known. This improves the code quality in a number of situations. NF-315-9604-015 GNATDLL can change DLL default base address A new GNATDLL switch (-b) can be used to change the default base address of a relocatable DLL. NF-315-9603-018 Linker_Options order is preserved The binder now guarantees that Linker_Options that appear with in a given unit appear in exactly the same sequence in the arguments presented to the linker. This removes the need for multiple arguments for Linker_Options, and GNAT no longer allows such multiple arguments (this was not a strictly conforming feature in any case). NF-315-9602-001 Specifying GNAT parser executable for gnatchop A new switch --GCC=xxxx, where xxxx is the path of the GNAT parser executable (defaulted to "gcc") allows selection of an executable different from the first one on the path. NF-315-9528-002 Foreign threads for Linux threads In the Linux version using the posix threads based run time (rts-native), foreign threads (those created outside Ada) are now recognized automatically and converted to Ada tasks for proper treatment by the Ada runtime. NF-315-9524-002 OS_Exit and OS_Abort marked No_Return The procedures OS_Exit and OS_Abort in GNAT.OS_Lib are now marked No_Return, avoiding the need for fiddling to suppress warnings when these calls appear as the last action of a function, and improving code in some cases. NF-315-9524-001 New tool gnatname for arbitrary naming schemes A new GNAT tool "gnatname" deals with arbitrary naming schemes. Given a set of directories and a set of name patterns, gnatname either produces a configuration pragmas file or updates or creates a project file. All the files in the specified directories whose names follow at least one of the name patterns and that contains an Ada compilation unit can then be compiled. NF-315-9521-008 New '=' suffix for by GNAT.Command_Line.Getopt With this suffix, Getopt in GNAT.Command_Line can now handle switches with parameters of the form "switch=xxxx" or "switch xxx". NF-315-9519-013 mkdir and sp no longer needed under VxWorks The symbol sp is no longer required by the GNAT run time under VxWorks, and the symbol mkdir is now only linked when needed, which means that it is easier to build smaller kernels for use with GNAT. See also NF-315-9519-004 below. NF-315-9519-004 taskInfoGet no longer needed under VxWorks The symbol taskInfoGet is no longer required by the GNAT run time under VxWorks, which means in particular that it is easier to build small kernels for use with GNAT. See also NF-315-9519-013 above. NF-315-9517-003 New restrictions identifier, No_Tasking A new restrictions identifier No_Tasking is available. This is similar but more convenient than Max_Tasks => 0, and has the advantage that it is treated at compile time like all other simple restrictions. This restriction is required to be consistent for a partition (i.e. if any unit that is in the partition has this restriction, no tasking is allowed in any other unit in the partition). NF-315-9512-012 Alternate method for cross-references in Glide A new variable ada-xref-search-with-egrep has been added to Glide, to control the secondary cross-referencing method based on egrep. NF-315-9507-005 New restrictions identifier, No_Secondary_Stack A new restrictions identifier No_Secondary_Stack is now available. This restriction ensures at compile-time that no reference to the secondary stack (System.Secondary_Stack) is made, and generates an error instead. The secondary stack is used for returning unconstrained objects. NF-315-9505-009 HI-E supports returning unconstrained objects The High Integrity Edition now supports functions returning unconstrained objects such as arrays of variant records. NF-315-9501-009 Representation information output to file If the -gnatR switch is followed by s (e.g. -gnatR3s), then the representation information is output to a file with file name file.rep (file_REP on VMS) where file is the name of the corresponding source file. NF-315-9431-003 Import (Intrinsic) allowed for all operators The specification of pragma Import (Intrinsic) previously was permitted only for the four basic operators + - * /. It can now be used for all numeric operators defined in package Standard. NF-315-9425-014 Improved performance for source file look up A new feature avoids unnecessary repeated searches for source files when using gnatmake with a project file. This is done using a mapping file to remember the mapping from unit names to file names and file names to path names. NF-315-9423-016 Specified addresses have alignment validation If an address is specified for an object that is not consistent with the alignment of the object, then various unpleasant consequences can arise. A check (either at compile time or runtime, depending on the value) is now made to detect this particular case of a program being erroneous, and Program_Error is raised if an inconsistency is detected. The run-time check is suppressed if pragma Restrictions (No_Elaboration_Code) is in effect or if range checks are suppressed. NF-315-9423-009 Latin-5 (Cyrillic) now allowed in identifiers A new switch (-gnati5) specifies that Latin-5 (Cyrillic) characters may be used in identifiers. Thanks to Vadim Godunko for contributing the ISO tables in appropriately formatted form. NF-315-9421-002 GNAT.Regexp no longer with's Ada.Text_IO The GNAT.Regexp package no longer with's Ada.Text_IO, saving space (since this was only used for debugging purposes), and making it possible to use this package when the Ada.Text_IO package is not available. NF-315-9420-003 New switches -b and -l for gnatmake Two new switches are implemented for gnatmake: -b for bind only and -l for link only, which along with the existing switch -c allow the use of gnatmake for controlling all compile, bind, and link steps. In VMS the form of the the qualifier is ACTIONS=(COMPILE,BIND,LINK). NF-315-9420-002 More cautious handling of Address parameters In a pure package, a subprogram with at least one argument of type System.Address or a type derived from it, is no longer considered pure by default. This affects only code generation (disconnecting a possible optimization); it does not affect legality of any program. The reason for this change is that we have seen cases where such parameters were logically being used as pointers, and the result of assuming that such functions were pure were unexpected results (even though such results were allowed by the RM). To override this default assumption, pragma Pure_Function can be used to force a function to be considered Pure. NF-315-9419-006 New type String_List added to GNAT.OS_Lib Definition of a type for an often-used data structure, array of String_Access type located in the same package. NF-315-9416-005 Debug file is always in object directory When invoked with -gnatD the compiler will always put the .dg (_dg on VMS) file in the same directory as the object file. This directory may not be the current working directory, if a -o switch is used. NF-315-9412-011 New switch -g for gnatdll The -g switch is now supported by gnatdll to build a DLL with full debugging information. This is needed to debug the DLL or to be able to retreive the DLL post mortem stack tracebeck using the addr2line tool. NF-315-9410-007 Improved control over elaboration order The pragma Suppress (Elaboration_Checks) when used as a global configuration pragma is now guaranteed to suppress all elaboration checks. This means that it is much safer and clearer to use -gnatE and this pragma to suppress checks in the case where the elaboration is known to be safe (rather than the old gnatbind -f switch, which has been undocumented. It is still implemented but generates a warning whenever it is used). NF-315-9409-006 Better code for Address_To_Access_Conversions The functins To_Pointer and To_Address are now always inlined if either front end inlining or back end optimization is specified, resulting in more efficient code for these operations. NF-315-9404-005 Document GDB treatment of function epilog Since there is only one copy of the epilog of a function and it has to be generated with some specific line number, you sometimes see a strange jump to the epilog when using the GDB next command. There is now a special section in the users guide describing this behavior. NF-315-9402-007 Meaningful names for tasks from allocators If an assignment statement has an allocator for a task on the right hand side, and the left side is a simple array reference, or a simple selected component reference, then a meaningful image name for the resulting task is built using the appropriate subscript value or field name. NF-315-9329-002 New warnings on unreferenced formals The new warning switch -gnatwf causes warnings to be output for cases of formal parameters which are not referenced in the subprogram body. This warning is also turned on by using the -gnatwu switch. Note that -gnatwuF will cause warnings to be output for unused entities other than formals, and may be used to approximate the previous behavior of -gnatwu. To suppress a specific instance of such a warning, you can use the new pragma Unreferenced (see entry for 9630-002) or you can use pragma Warnings (Off, formal-name). NF-315-9324-016 New documentation of Storage_Size attribute A new section has been added to the GNAT reference manual describing the handling of the Storage_Size attribute. In particular, the special handling of zero sized dummy storage pools is now described (the feature of special efficient handling of such pools has been there for some time, but has not been explicitly documented). NF-315-9319-019 Improved control over validity checking The -gnatV switch now takes a string of letters that specify exactly where additional validity checks should be performed. The possibilities are both far more extensive, and also can be controlled much more precisely. In addition a new pragma Validity_Checking can be used to control the validity checking at the source program level. Used with the new Initialize_Scalars pragma, this new feature provides a powerful technique for finding uninitialized variables and other sources of invalid values. NF-315-9319-008 PPC VxWorks runtime built with -mlongcall The GNAT run time is now built with -mlongcall by default on PowerPC VxWorks, to get around the limit of 32 megs of memory on this configuration more easily. The compiler option -mlongcall is still required on user's code. NF-315-9314-005 Ada.Text_IO.Get_Immediate on VxWorks On VxWorks, Get_Immediate used with the Available parameter isn't blocked any more. But before calling Get_Immediate, a call to Interfaces.VxWorks.IO.Enable_Get_Immediate is required. NF-315-9311-003 Foreign threads for HP-UX 11 pthread In the HP-UX 11 version using the posix threads based run time (rts-pthread), foreign threads (those created outside Ada) are now recognized automatically and converted to Ada tasks for proper treatment by the Ada runtime. NF-315-9308-001 New package GNAT.CRC32 This package implements the CRC-32 algorithm. This computes a 32-bit checksum from either character or stream element data. This checksum is the one used by Ethernet and FDDI. NF-315-9307-003 Enhanced Project facility The new Project Manager allows configuring various properties of a collection of source files, the directories (containing the sources, outputs, and executables), switch settings, main unit files, programming languages (currently Ada and/or C), and source file naming conventions. Settings are defined in project files. Projects can be interrelated in several ways. A project can import other projects containing needed source files. Alternatively, a child project can extend a parent project, inheriting the parent's source files and overriding any of them with alternative versions. This new facility is documented in the new version of the GNAT user's guide. NF-315-9306-002 GNAT.IO output to standard error It is now possible to write output to standard error using the GNAT.IO package (additional routines to specify the current file to be Standard_Output or Standard_Error added) NF-315-9305-004 New constant in GNAT.Regpat Never_Match is a special pre-compiled regular expression that never matches anything. NF-315-9303-012 Specifying the default runtime location A new switch --RTS=xxxx, where xxxx is the new default runtime location, is now recognized by gnatmake, gnatbind, gnatls, gcc, gnatfind and gnatxref. NF-315-9303-006 Solaris no longer needs -funwind-tables It is no longer necessary to use the -funwind-tables switch under Solaris to get call chains at run time (using the -E gnatbind switch, or GNAT.Traceback). NF-315-9231-014 Foreign threads for Sparc Solaris rts-pthread In the Sparc Solaris version using the posix threads based run time (rts-pthread), foreign threads (those created outside Ada) are now recognized automatically and converted to Ada tasks for proper treatment by the Ada runtime. NF-315-9231-007 New warning for false assertion If an assert statement is known to be false at compile time and the test is other than an explicit False, then a warning is generated if assertions are enabled. NF-315-9231-001 Using gnatmake with a project file and no main It is now possible to invoke gnatmake with a project file and no main program. The project file can then specify the main program, or arrange to compile a specified set of files. See the GNAT Project Facility Guide for further details. NF-315-9230-004 New VxWorks tasking run time A new low level tasking run time has been written for VxWorks targets that provides a lighter implementation that is more efficient. NF-315-9230-002 Conditional warnings removed in assertions Warnings generated by the -gnatwc (warn on conditional tests whose outcome is known at compile time) is now suppressed if the test occurs in a pragma Assert (since in this context such tests are reasonable). NF-315-9229-003 Redundant checks removed by front end The front end of the compiler now removes redundant checks against the bounds of the relevant subtype. This reduces compile time, and can significantly affect the size of the generated code in -O0 mode, particularly if -gnatVe is used. Note that this transformation may change the effect of some incorrect programs containing operations on invalid values. NF-315-9228-012 Using gnatmake with several main programs It is now possible to invoke gnatmake with a list of more than one main program. This is similar in effect to invoking gnatmake multiple times, once for each main program. NF-315-9217-016 Better warning for := in place of => The error of using := where => is required for named parameters in procedure calls is now specifically diagnosed in a clear manner. NF-315-9213-005 Better error message for missing pragma Pack A common error is to assume that a Size clause can be used to force implicit packing (and some Ada 83 compilers allowed this), but in accordance with recommendations in the RM, GNAT requires an explicit pragma Pack, and now an error message specifically noting the need for an explicit Pack is output. NF-315-9209-001 Warning on null range for fixed-point There is no obvious useful application for a fixed point type declaration with a null range (high bound less than low bound), so a warning is now given for such declarations. NF-315-9206-004 Eliminate pragma can now specify homonym number A new optional parameter Homonym_Number is implemented for the Eliminate pragma, making it easier to specify that some but not all of the instances of an overloaded subprogram are to be eliminated. This is primarily for the use of gnatelim but the pragma can be used in application programs. NF-315-9202-002 Better control over memory allocation routines To implement dynamic memory allocation and deallocation, GNAT now provides an Ada package (System.Memory) that you can modify and recompile to change the implementation of the default storage pool (e.g for adding memory instrumentation). NF-315-9201-012 New pragma External (synonym for pragma Export) Some versions of the VADS Ada 83 compiler permitted pragma External to mean the same thing as pragma Export in Ada 95. GNAT now recognizes pragma External as equivalent to pragma Export to make it easier to port legacy code using this pragma to externalize Ada subprograms. NF-315-9201-008 New routines in table packages. Three new routines have been added in GNAT.Dynamic_Tables and GNAT.Table. Free completly frees the table by releasing all associated memory. Set_Item puts an item into the table at a specific location, expanding the table if the index is outside the current upper bound. Append adds an entry at the end of the table. NF-315-9127-004 Better handling of duplicate end line semicolon If an end line has an extra semicolon, then this is now cleanly diagnosed as an extra semicolon. Previously the error recovery was not clean in this situation. NF-315-9121-003 File_Time_Stamp can get a directory time stamp Using GNAT.OS_Lib.File_Time_Stamp it is now possible to get the time stamp for a directory. This routine used to support only files. NF-315-9120-006 Better warnings on unused with_clauses If the only mention of a context unit is in a renaming declaration in the visible part of a package, do not suggest that the with_clause can be moved to the body. NF-315-9108-001 Registry is not searched on NT with -nostdinc Under Windows if flags -nostdinc is passed to gnatmake, the default libraries set into the registry will not be used. NF-315-9015-002 Invalid initial values for Boolean Unsigned integers and enumeration types are now initialized with out of range values in all possible cases for Normalize_Scalars or using the new Initialize_Scalars pragma. In particular, Boolean values stored in more than one bit are now initialized with out of range values. NF-315-9014-007 Specifying a configuration pragmas file It is now possible, using new switch -gnatec, to provide a file containing configuration pragmas. Unlike the standard gnat.adc file, this file does not have to be in the current directory, providing more flexibility. NF-315-9113-007 Package System is more accessible There is now a specialized package system for each target, which contains the values as plain easily readable constants. This obviates the need for the gnatpsys utility (GNAT SYSTEM for VMS), which did not work anyway in cross environments, and also obviates the need for the Standard attributes Tick, Max_Priority, and Max_Interrupt_Priority (to replace these, just use the corresponding constants in package System). NF-315-9012-011 Better msg for calling generic procedure If a procedure call attempts to call a generic procedure without first instantiating the procedure, the error message is specialized to clearly indicate this particular error. NF-315-8930-005 Glide and Gvd in Tornado integration improved Glide and Gvd can now be launched in the current project directory. NF-315-8928-003 Add many routines in GNAT.Directory_Operations GNAT.Directory_Operations has been enhanced with many routines. One to remove a directory, routines to extract part of a pathname (base name, extension, file name), and two powerful directory iterators. NF-315-8927-001 Compile is more robust when using -gnatQ The -gnatQ switch which forces the compiler to do full semantic analysis and generate an ali file is now much more robust, and very seldom causes the compiler to fall down, so it can be used routinely. This is useful with tools (such as GLIDE) which use the ali file for browsing purposes, since it allows browsing of incorrect and incomplete files. NF-315-8923-013 Unreserve_All_Interrupts for signal core dumps For all targets except OpenVMS, Win32, VxWorks, OS/2 and RT-Linux, pragma Unreserve_All_Interrupts now disconnects the signals SIGILL, SIGBUS and SIGSEGV from the GNAT runtime mapping to exceptions. This causes the signal to propagate to the default OS handler, resulting in a core dump for further analysis. NF-315-8922-002 GNAT.Sockets for VxWorks GNAT.Sockets is now fully supported on all VxWorks ports. NF-315-8915-002 Support for POSIX Threads on Lynx 3.1.0a The GNAT Ada runtime now uses the the new Posix 1.c threads API, provided by LynxOS as of version 3.1.0. This work also adds support for foreign threads, allowing Posix threads to coexist with Ada tasks. NF-315-8914-009 Clearer message for null for access parameter If null is explicitly passed as an argument for an access parameter, the new error message explicitly identifies this condition. NF-315-8902-011 New pragma Link_With for Ada 83 compatibility A new pragma Link_With has been implemented for compatibility with certain Ada 83 compilers. The effect is the same as that of pragma Linker_Options, except that spaces are treated as separators between separate arguments. NF-315-8902-011 New warning for suspicious Bit_Order usage If a non-standard Bit_Order is specified, then the byte in which a given field is placed is never affected. However, if the first bit is greater than 7 it easily creates the confusing impression that it might be affected. The compiler now generates a warning if a non-standard Bit_Order is used and a first bit value is not less than the storage unit size. NF-315-8902-009 Finer grained locking for file open The task locking for opening files is now much finer grained, and in particular, the actual open itself no longer is done with a lock held. This considerably improves opportunities for parallelism between tasks in environments (e.g. networked situations) where file opens can take a long time. NF-315-8823-008 pragma CPP_Destructor is removed This pragma has never been implemented in GNAT, so we are now removing it. It is possible that it might be implemented in some future version, but there is no point in having a pragma around that is not implemented. NF-315-8823-006 warning on null loop ranges A warning is now generated for a loop range that is known to be null at compile time, and for suspicious reverse loops whose upper range is an explicit zero or one. NF-315-8822-001 New Ada.Synchronous_Task_Control on VxWorks Synchronous_Task_Control has been reimplemented using VxWorks binary semaphores for better efficiency. This also allows the use of the package facilities within direct-vectored hardware interrupt handlers to synchronize with Ada tasks. NF-315-8820-014 New pragma Initialize_Scalars A new pragma Initialize_Scalars has been implemented. This is similar in concept to Normalize_Scalars, with two important extra capabilities. First there is no requirement that this pragma be used on all units in a partition consistently, so it can be used on selected application units to cause the initialization of otherwise uninitialized data. Second the actual values used for initialization can be controlled at bind time without needing to recompile, allowing repeated testing with different values for uninitialized data. NF-315-8729-005 More detailed warnings on unchecked conversion For the case of unchecked conversions where the size of the source is different from the size of the target, new more detailed warnings are output if the -gnatf flag is used. For example "16 trailing bits of source will be ignored". NF-315-8728-015 BOOL type in Win32Ada binding This type is now derived from Boolean, which allows more natural logical operations with values of this type. This is a C convention boolean, meaning that standard C semantics (zero=false/non-zero=true) is respected. NF-315-8725-001 Improved error recovery for missing underscore The parser will now recognize some cases of missing underscore, for example: "function second one return integer" now generates "unexpected identifier, possibly "second_one" was meant here. NF-315-8719-010 New warning for biased rounding A new warning flag -gnatwb/-gnatwB turns on/off a new warning for cases where the static expression evaluation rules force a floating-point number exactly half-way between two machine numbers to be rounded away from zero, when at run-time the normal biased rounding rules would require rounding towards zero. This warning is off by default, and is not turned on by the use of -gnatwa. NF-315-8709-007 New switch -gnatR3 for variant rep info The swich -gnatR3 causes output of the size of variant record types in a symbolic expression format in cases where the size depends on the discriminant. NF-315-8707-009 Check for integer division by 0 by default GNAT now checks for division by 0 by default. This check used to be controlled by the -gnato switch and was not done by default. It is possible to remove this check with a pragma Suppress Division_Check or with -gnatp switch. NF-315-8706-016 Improved error message for bad Entry A clearer error message is now given for the mistake of using := in place of = in an entry barrier. NF-315-8706-006 New formats for -gnatV switch You can now use 0/1/2 as synonyms for n/d/f with the -gnatV switch. This is more uniform with other similar switches. NF-315-8621-002 Ten character VxWorks task name limit removed The truncation of the Ada task name to 10 characters when the task is created under VxWorks has been removed. This was a convention followed by some other software, but this limit was not enforced and was definitely unhelpful for Ada. NF-315-8620-004 New License pragma for automated GPL checking A new License pragma allows optional automatic checking that a program does not violate GPL licensing conditions (i.e. that it does not contain mixtures of units licensed in an incompatible manner). NF-315-8612-009 Package GNAT.Registry (access Windows registry) GNAT.Registry is high level binding to the Windows registry database. This binding implements a set of simple registry routines. For complete registry API, but at a lower abstraction level, you should use the API provided by the Win32Ada API, but GNAT.Registry will prove more convenient for many simple registry related editing and access tasks. NF-315-8610-002 Better message placement for enum rep clause If a value in an enumeration representation clause is outside the representable range, then the error message is placed on the offending literal, rather than the clause itself. NF-315-8609-017 New option for gnatbind to list restrictions A new switch -r for gnatbind causes the output of a list of pragma Restrictions identifiers that can be used for the current partition (possibly improving code efficiency). NF-315-8605-007 Discriminant checking functions now inlinable If -gnatn is specified, the functions used to check for the proper discriminant value are now candidates for being inlined. This improves performance for programs using variant records which are run with checks on. NF-315-8604-005 Better handling of predefined exception raise The code for an explicit raise of Constraint_Error, Program_Error, or Storage_Error is improved, saving time and space, and meaning that these cases can all be used with pragma No_Run_Time. NF-315-8604-004 Subprogram out of order msg now has name The warning message generated for a violation of the -gnatyo (subprograms in alpha order) style switch now contains the name of the offending subprogram. NF-315-8603-003 Hardware interrupt handling for PPC and 68K The use of the standard Ada facilities for interrupt handling has been implemented for hardware interrupts on ppc and and 68k targets. Interfaces.VxWorks has also been enhanced. NF-315-8601-012 Tree can be output in syntax only mode The -gnatdt (dump tree file for diagnostic purposes) is now recognized when used together with -gnats (syntax only) to allow a dump of the unanalyzed parse tree. NF-315-8519-008 Zero Cost Exceptions implemented on VMS. Zero Cost Exceptions have been implemented on VMS and made the default. This eliminates the penalty for setting up exception handlers and will speed up many programs. NF-315-8405-008 Better diagnostics for error in gnat.adc When gnatmake (as opposed to gcc) reads a bad gnat.adc file, it simply says "syntax error" without further identifying the error or its location. This circuit is now enhanced to give a detailed message saying what is wrong and where. NF-315-8314-006 New documentation for Intrinsic Subprograms A new chapter in the GNAT Reference manual gives full details on the set of intrinsic subprograms implemented in GNAT, notably including a full set of intrinsic shift functions that can be applied to user defined signed integer types and binary modular types. NF-315-8313-001 Warning on useless Bit_Order attribute clause A Bit_Order attribute clause specifying the non-standard bit ordering applied to a record for which no component clauses are given can never have any effect (since bit numbering is not an issue if there are no component clauses). A warning is now generated on encountering the useless clause. NF-315-8220-004 Ada library building enhancements Building Ada libraries that can be used outside of the Ada context is now simplified with the new gnatbind -Lxyz switch, which allows the name of the adainit and adafinal procedures to be changed to xyzinit and xyzfinal. GNAT has also been enhanced to make sure that any Ada unit can not be elaborated twice. These enhancements make it easier to distribute one or more Ada libraries in turn key form. NF-315-8019-002 Integration of GDB version 5.0 On most targets, we have now upgraded the Ada aware GDB technology and associated GVD technology to GDB 5.0, which provides important improvements in both reliability and functionality. NF-315-7930-003 Documentation of Inline Assembler A new chapter in the GNAT User's Guide uses a series of examples to describe the main features of Inline Assembly language programming. NF-315-7002-004 Switch for gnatchop to preserve time stamps A new switch for gnatchop (-p) (/PRESERVE in VMS) causes the time stamps of the output files to be reset to match the time stamp of the input file, which may be useful for preserving coherency of time stamps in an environment where gnatchop is used as part of the build process.