Development Log
-
New cross-reference engine based on sqlite
GPS and GNATbench both have a new xref engine, based on sqlite. This new engine is expected to bring extra performance (since the xref database becomes persistent across sessions and GPS will no longer need to parse ALI files on the fly), as well as more stability (by using an external process to fill the database, and relying on sqlite's very good stability). This engine is currently disabled by default, but can be enabled by adding a line "ENTITIES.SQLITES=yes" in $HOME/.gps/traces.cfg . -
Jan 23rd, 2013A talk presenting OTAWA toolbox for WCET computation - AdaCore Internal Seminar
AdaCore Internal Seminar - Wednesday april 3, 2013.
Hugues Cassé, one of the principal architects and developers of the toolbox, will come to the AdaCore Paris offices to give a talk presenting the OTAWA toolbox for WCET computation.
OTAWA is a set of libraries and static analysis tools aimed at allowing WCET computation based on an abstract representation of the machine code and the target hardware, with existing mappings for a set of popular processors. For more details, see http://www.otawa.fr
If you are interested in attending this talk, please send email to events@adacore.com.
-
Performance improvements for unions
Several adjustments have been made to the circuitry that handles the marshalling and unmarshalling of aggregates, and in particular unions with enum discriminant. This results in a significant performance improvement when handling such data. -
Faster analysis time on large aggregates
CodePeer now takes much less time analyzing code containing large aggregates used e.g. for default initialization of objects. -
GB: Export GNATbench preferences like CDT
GNATbench preferences can now be exported via the export preferences wizard and imported into another workspace via the import preferences wizard. -
Backup copies of project files with gnatname
When invoked with an existing project file, gnatname creates a backup copy of the project file, unless it is invoked with the new switch --no-backup. This does not apply to VMS, where multiple versions take care of this need. -
Switches—RTS for gprclean
gprclean may now be called with switches --RTS= or --RTS:<lang>=. The runtimes specified with these switches are taken into account in the invocation of gprconfig in auto-configuration. This allows gprclean to have more accurate file names to delete, for example when the executable extension depends on the runtime. -
GPS: autofix on missing constant with preferences
Autofix has always done fixes in lowercases. This enhancement performs the fixes on missing constants following the user defined preferences specified in Preferences/Editor/Ada/Reserved word casing -
Improved messages for explaining non-staticness
The messages that explain why an expression is non-static (when it is required to be static), are improved, and in particular, if a string concatenation involves a non-static aggregate, this case is now clearly identified in the message. -
More efficient handling of others for string case
Aggregates of the form (others => 'X') which are similar in effect to the use of a string literal are now handled more efficiently. Note that it is still the case that such aggregates are not static from a language point of view, so cannot be used in contexts requiring a static string. -
Pragma No_Inline to suppress inlining
A new pragma No_Inline has been implemented to suppress inlining for a subprogram or for the instances of a generic subprogram. -
Profile (Rational) and pragma Overriding_Renamings
A new profile has been introduced to simplify porting legacy code that compiles with the Rational APEX compiler. This profile enables the pragmas Implicit_Packing and Use_VADS_Size, as well as the new pragma Overriding_ Renamings, which makes legal the renaming of an inherited operation with the same name in its own scope. -
Pragma Loop_Optimize to control loop optimizations
A new pragma Loop_Optimize has been implemented to control optimizations applied to loops. It makes it possible for the programmer to provide the compiler with optimization hints for loops on an individual basis. -
gnatcoll_db2ada allows specifying postgresql port
It is now possible to specify which port number the postgreSQL server runs on, when running gnatcoll_db2ada. -
Support Ada.Execution_Time on PowerPC bare board
Ada.Execution_Time is now supported by the Ravenscar runtimes on ppc-elf and p55-elf. -
GPS: move Serialize to /Edit/Rectangle/
This menu was previously in /Edit/Selection, but is more logical in the Rectangle submenu since it conceptually applies to a rectangle. -
Support for certificate checking has been added
Support for certificate checking has been added. The actual status code can be retrieved and the corresponding message if needed. It is then possible to know why a certificate has been rejected from the verify user's callback. -
POGS -l option to ignore missing Simplifier logs
The new -l command line option causes POGS to ignore missing slg files rather than raising errors. This option is designed to be used with the Simplifier's -nolog option. -
Pragma Warnings and GCC back-end warnings
Pragma Warnings can now be used in conjunction with the warnings of the GCC back-end to exercise finer control over these warnings. -
Use discriminant subtype constraints in derivation
The compiler now takes into account the subtype constraints added by renaming discriminants in the derivation of untagged discriminated types to determine the size of mutable objects of the derived types. -
Project_Path searched before ADA_PROJECT_PATH
Project_Path values are searched before ADA_PROJECT_PATH. This behavior is better as if Project_Path is defined for the aggregate project we do not want to pick a random project found in ADA_PROJECT_PATH. -
Avoid false elab warnings on assertion calls
The warning circuit for elaboration calls has been enhanced to avoid some false positive warnings for functions called assertion expressions (e.g. the argument of a Postcondition pragma or Post aspect). -
Ada 2012 aspects allowed on renaming declarations
In Ada 2012 mode, aspects are now allowed on all renaming declarations. This is relevant only for implementation-defined aspects (e.g. Warnings => Off). -
New Linker attribute Trailing_Switches
A new attribute Trailing_Switches has been added in package Linker of project files. These switches are added in the linking command line after the required switches, so that they can override these switches. -
Pragma Interface/Interface_Name and obsolescence
Pragma Interface is now considered as violating the No_Obscolescent_Features restriction even in Ada 95 mode. Both pragmas Interface and Interface_Name generate warnings if -gnatwj is set. But note that Interface_Name is not considered to violate the restriction (since it is a GNAT defined pragma that does not appear in Annex J). -
Handling of missing IS for expression function
Error handling for some common cases of forgetting the IS that follows an expressions function is improved, and a clear error message complaining about the missing IS is now given. -
—config= in Builder switches
gprbuild now takes into account a switch --config= in package Builder of the main project. -
Make predefined packages compatible with UTF-8
IAC generates pragma Wide_Character_Encoding to allow usage of prodefined CORBA packages in code with different encoding. -
Support for ‘json’ type in GNATCOLL.SQL
It is now possible to specify a field type as 'json'. This will be translated to text or json, depending on the SQL engine. -
Improved diagnostic on invalid component rep-clause
The compiler was improved to emit more precise error messages when detecting an invalid representation clause for a volatile or atomic record component, either misaligned or of a size not matching the type's Object_Size attribute. -
Add support for distributed compilation
It is now possible to use multiple computers to conduct the compilations. This can give good speed-up for large projects. -
Specify postgreSQL’s port number
It is now possible, when connecting to a postgreSQL server, to specify which port number should be used. -
Additional standardisation in Simplifier
The Simplifier now standardises conclusions after all other proof strategies are completed. In some cases this enables it to discharge conclusions that were previously left undischarged. -
Rules for proof of rounding from real to integer
The Examiner now emits rules for rounding to integer types when VCs involving real numbers are generated. This enables the proof tools to discharge VCs involving rounding which previously could not be proved without supplying user rules. -
Better handling of symbolic traceback in GNU/Linux
It is now possible to get proper symbolic traceback from a shared library on GNU/Linux when using the GNAT.Traceback.Symbolic unit. The traceback crosses the shared library and gives proper symbolic information for the caller module (executable or shared library). -
Better handling of symbolic traceback in Win32 DLL
It is now possible to get proper symbolic traceback from a Windows DLL when using the GNAT.Traceback.Symbolic unit. The traceback crosses the DLL and gives proper symbolic information for the caller module (executable or DLL). -
Accuracy of time conversions for bare board targets
The implementation of functions To_Duration and To_Time_Span for bare board Ravenscar run-time libraries has been changed to reduce accuracy losses and the occurrence of overflows. -
Improve DFW server lookup for GPS/GDB for VxWorks
When an exact match is found, favour it over other (partial) matches. -
GPS: EditorOverlay can now highlight a whole line
The EditorOverlay class can now be used in Python plugins to highlight an entire line, through the property "paragraph-background":# Create an overlay for an editor: b = GPS.EditorBuffer.get(GPS.File ("my_file.adb")) o = b.create_overlay("my_overlay_name") # Set the paragraph-background property to pink o.set_property ("paragraph-background", "#f0c0c0") # This highlights the entire line 317 in my file b.apply_overlay (o, GPS.EditorLocation(b, 317, 1), GPS.EditorLocation(b, 317, 1)) -
SPARKMake returns non-zero exit status on error
SPARKMake now returns a non-zero exit status when it encounters an error, thus making it easier to detect problems when used in an automated build process. Some SPARKMake warnings have been reclassified as errors. Details are in the SPARKMake User Manual. -
Unconstrained float overflow checks
CodePeer now comes with an option to check for overflow on unconstrained floating point types. Previously, CodePeer was following the semantic of most Ada compilers who do not generate overflow checks on unconstrained floating point types. A new switch is provided (-gnateF) to generate SCIL files with these additional checks. -
New option to disable text listings
A new switch (-no-text-output) is available to disable the generation of text listings when CodePeer generates reports. This is similar to the existing -no-html-output and can be used to speed up CodePeer processing when these text listings are not used. -
Precise analysis of int to float conversions
The treatment of integer to float conversion was imprecise, leading to false positive messages. For example, CodePeer did not realize that Float(0) = 0.0. A precise analysis of such conversions is now implemented. -
Switch/pragma to force overflow checking on float
The configuration pragma Check_Float_Overflow, or the -gnateF compiler switch can be used to set a mode in which unconstrained floating-point types (such as the predefined type Float) do overflow checking against the base range bounds for operators instead of generating infinities. This adds considerable overhead, but may be required in some cases. -
Tag warning messages with relevant switch
The switch -gnatw.d causes warning messages to be tagged showing how they are controlled. If a warning is generated by default, the tag is [enabled by default]. If a specific warning switch controls the generation of the warning then the tag is the switch to turn the warning on/off. For example: [-gnatwj] for obsolescent features, -gnatwj turns the warning on and [-gnatwJ] turns the warning off. This mode is normally off, it is turned on by using the switch -gnatw.d. This feature is not available in OpenVMS versions of GNAT Pro. -
GPS: Key shortcuts dialog display improved
The display of the key shortcuts in this dialog now matches what is done for the toplevel menus, using symbols like up arrow for the shift key, a caret sign for the control key, and the special symbols for Mac keyboards. -
New switch: -level
A new -level switch is introduced, which replaces -global and -quick switches, and introduces new levels of analysis, to allow purely local and fast analysis, up to fully global analysis, depending on the needs. -
Support for ‘varchar’ in GNATCOLL.SQL.Inspect
gnatcoll_db2ada is now able to understand the type 'varchar' -
CodePeer web server and message editing
CodePeer now comes with an optional web server which can serve the HTML pages it produces, and allows users to edit messages manually from their web browser on a remote machine. -
New subprogram GNATCOLL.VFS.Size
It is now possible to query the size of a file, including on remote file systems. -
GPS: Project, Files and Windows views pop-ups
Tooltips added to views to help navigation when windows are narrow. -
ECL: Android development supported
GNATbench now provides an integration with the Android Development Toolkit (ADT) for mixed Ada-Java development. Java applications on the Android can invoke Ada code using interfaces automatically generated by AJIS. A new project type and corresponding new-project wizard are provided. -
GPS: the Project Wizard takes advantage of gnatname
The project wizard now optionally uses gnatname to search for Ada units in files with non-standard naming conventions. -
attributeGroup support in simple type extensions
It is now possible to extend a simple type in a XSD file, and define which attributes are valid in the extension through a <attributeGroup> tag. Previously, the attributes had to be specified one by one through the <attribute> tag. -
CSV output
The codepeer_msg_reader tool has a new switch -csv to output messages in CSV format, suitable for use in spreadsheets, and containing extra information such as whether messages are new, or have been reviewed. -
ASIS Corresponding_Declaration for entries
The Asis.Declarations.Corresponding_Declaration query is extended for An_Entry_Declaration elements. This allows retrieval of the explicit entry declaration corresponding to an implicit inherited declaration of an entry of a derived record or protected type. -
New gnatpp option to set named number casing
A new option -nn(D|U|L|M) has been added to gnatpp. This option allows specifying the casing of names introduced by named number declarations. -
Unconditionally create—autoconf= path
gprbuild now creates unconditionally the directory of the configuration project file specified with --autoconf= when this directory does not exist. -
Improved recognition of stub subprograms
When CodePeer encounters a routine whose body consists of only a raise statement and for which No_Return has not been specified, it is assumed that this is a stub routine whose "real" implementation has not been provided. Calls to the subprogram are not treated as errors but instead as calls to a subprogram whose implementation is unknown. -
Speed up GNATCOLL.SQL.Sessions
The internal handling of the cache in the sessions has been optimized, leading to execution as much as three times faster on a code that performs a lot of manipulation of database elements. -
Improved Simplification for composite constants
The Simplifier's rules for processing composite constants have been improved. Consequently, users may notice more VCs being discharged by the Simplifier. -
ECL: AJIS development supported
GNATbench now provides an integration with AJIS, the high-level Ada-Java Interface Suite. A new project type and corresponding new-project wizard are provided. -
New API GNATCOLL.Xref and gnatinspect
A new package GNATCOLL.Xref is provided to perform cross-reference queries on source code. It analyzes the compiler generated .ali and .gli files, and stores them in a sqlite database to perform fast queries. An external tool gnatinspect is also provided that provides a command line interface to this package, that can be used from non-Ada tools. -
[VMS] Support for DECForms in DEClib
The DECForms API (forms_definitions.ad[bs]) has been ported and added to DEClib providing the capability to develop and deploy forms-based user interfaces for interactive applications running on VMS. -
Pragma Attribute_Definition
A new implementation defined pragma Attribute_Definition has been implemented, which allows an attribute definition clause to be expressed as "pragma Attribute_Definition (Attribute, Entity, Expression);". If the attribute is known to the compiler, this is equivalent to "for Entity'Attribute use Expression", otherwise the pragma is ignored. This allows source code to be written that takes advantage of some new attribute, while remaining compilable with earlier compiler versions (which ignore unrecognized pragmas, but not unrecognized attributes). -
Add A_Box_Expression to Asis.Expression_Kinds
According to ARG ASIS 2005 Draft, A_Box_Expression is added to the set of values of the Asis.Expression_Kinds. This makes processing of <> in association more convenient. -
AI-421 Sequential activation and attachment
The Sequential partition elaboration policy is supported for restricted (Ravenscar) runtimes. When this policy is used, tasks activation and interrupt handlers attachment is deferred until all library units are elaborated. -
Support for -jobs 0
The -jobs switch now accepts the special value 0 which means use the number of cores available on the machine. -
Improved generated code for VAX float literals
On OpenVMS platforms, real literals using the VAX float representation are now directly emitted. Generated code is much smaller and compile time is reduced. -
GPS: Show protected objects in Outline view
Protected and task types/objects and their entries are now visible in Outline View. New filter in Outline View "Show tasks, entries, and protected types" is used to show/hide these items. -
New switch: -output-msg
CodePeer now takes a new -output-msg switch when using project files, and outputs compiler-like message directly by calling codepeer_msg_reader automatically. -
Victor is now available on Solaris
Victor is now available on all supported platforms, including Solaris. -
Ignore Optimize_Alignment (Space) to avoid error
Previously Optimize_Alignment (Space) forced an alignment of one for all packed records, including variable length records. Since in general it is not possible to specify an alignment of 1 for such records, this could result in a compiler error. The compiler now ignores the pragma for such records, avoiding this error. -
AI-265 Partition elaboration policy
The pragma Partition_Elaboration_Policy specifies the elaboration policy for a partition. The default policy is Concurrent. -
Improved handling of -output-only
The -output-only switch is now taken into account by all tools (codepeer_msg_reader, GPS, ...) in addition to the HTML and Text output. -
Python support in sparc64-solaris debugger
The sparc64-solaris debugger has been enhanced to include a Python interpreter. This interpreter can be used to extend the debugger's functionality using Python scripts. -
Add support for Windows resources
Support for compiling Windows resources file with the binutils's windres compiler has been added. -
Python support in x86_64-darwin debugger
The x86_64-darwin debugger has been enhanced to include a Python interpreter. This interpreter can be used to extend the debugger's functionality using Python scripts. -
Python support in x86_64-windows debugger
The x86_64-windows debugger has been enhanced to include a Python interpreter. This interpreter can be used to extend the debugger's functionality using Python scripts. -
-background enabled by default
The -background codepeer switch is now the default, so it's no longer needed to specify it explicitly. The -no-background is available to get the previous default behavior. -
Add support for arbitrary runtimes for GNAT
The names of the runtimes for GNAT are no longer limited to a restricted list. -
More flexibility in handling MessagePatterns files
Codepeer and codepeer_msg_reader now allow specifying an alternate MessagePatterns.xml file on the command line. Both executables also support additional patterns in a secondary .xml file. -
GPS: support for powerpc-xcoff-lynxos178
GPS now supports building for powerpc-lynxos178. -
Deferred tasks activation on Ravenscar profiles
The Ravenscar profile leaves the point at which tasks are activated unspecified. GNAT now guarantees that task activation is always deferred to the point at which all library units are elaborated. This improves determinism. -
GPS: support for x86-pikeos
GPS now supports building for the x86-pikeos architecture. -
Ranking info for CodePeer warning messages
The ranking information (low/medium/high) is now prepended in front of CodePeer warning messages in the locations view, to make it easier to find messages of a particular ranking. -
Ranking info for warning messages
codepeer_msg_reader now prepends the ranking information (low/medium/high) in front of warning messages, to make it easier to find messages of a particular ranking. -
Add support for returning binary message digest
In secure hash computation (SHA-1 for example) it is now possible to get the digest of a message in a binary form. Previously it was only available as a hexadecimal encoded string. -
Warn on redefinition of entities in Standard
A new warning, activated by -gnatw.k, causes the compiler to generate a warning for any redefinition of an entity that is defined in package Standard (e.g. type Integer is new Natural). Such redefinitions are usually undesirable, because these entities are always directly visible, and that can lead to surprises. -
Suppress whole directory via MessagePatterns
New attribute in the MessagePatterns file allows Codepeer to apply a rule to all the messages coming from files in a particular directory. -
Warn on suspicious identical loop ranges
If nested loops range over S'Range and S'Range, where no subscript position range number is given, and the type of S is a multi-dimensional array, then a warning is given, since it seems suspicious to range over the same index. -
Better exception message from bad ‘Value string
When a bad input string to 'Value results in raising a Constraint_Error, the exception message includes a copy of the bad input value string. -
Better message for unparenthesized unary minus
Unary minus requires parenthesization when used as an operand in a larger expression (for example, A+(-B)). The compiler now gives a clearer message when the required parentheses are not present. -
GPS: Support for arm-eabi
GPS now supports building for the arm-eabi toolchain, needed for the arm-elf architecture. -
Better message for one element positional aggregate
The error message that a positional aggregate cannot have a single element is now extended to cover the case of a record aggregate that consists only of a single discriminant value. -
Add progress support for client upload
An upload progress has been added for the AWS.Client.Upload API. -
Improved handling of non-terminating tasks
CodePeer now has better support for tasks that run indefinitely, and does not issue a warning in that case. -
New warning on duplicate set elements
The compiler issues a warning if an integer, character, or enumeration literal is repeated in an Ada 2012 set membership test. -
Add progress support for client upload
An upload progress has been added for the AWS.Client.Upload API. -
Improve awsres
The awsres tool now supports recursivity and has a way to specify the output directory for the generated files.