- Ada 2012
- Ada 2005 / 95 / 83
- Embedded Development
- Formal Methods
- Open Source
- Safety-Critical Development
- Static Analysis
Nov 30th, 2013
Support for large interrupt id range
CodePeer now accepts large interrupt range when using pragma Attach_Handler, for compatibility with any target compiler.
Nov 30th, 2013
Add message about mismatching predicates
In cases where types do not conform because of mismatching predicates (e.g. when the formal in a subprogram spec and the formal in a subprogram body are of subtypes with mismatching predicates), then a message specifically noting this mismatch (which is course new with Ada 2012) is output.
GPS: Multi selection using multi-cursors
When multiple cursors are active, it is now possible to select simultaneously with all cursors as you would with one.
GPS: Copy/Paste operations using multi-cursors
When multiple selections are active, it is possible to cut, copy, and paste with multiple cursors. If the copy buffer has been filled with the same cursors, then the content of each individual cursor will be pasted. If the buffer was filled with only the main cursor, or with other cursors in a precedent operation, the content of the main buffer will be replicated on every cursor's location. Cut and copy works as you would expect. Multi-cursors buffers are ignored in the context of other applications, or when there are no multi cursors active.
GPS: New line number display preference
The "Display line numbers" preference now settings Never, Some_Lines, All_Lines. The new Some_Lines option displays every fifth line number, reducing visual clutter and making the source code stand out more.
Document non-portability of GNAT.OS_Lib.Rename_File
The function GNAT.OS_Lib.Rename_File is significantly non-portable in the case where the output file already exists. On unix, the effect is to first delete the file, and proceed with the renaming, signalling success. For windows, such a call fails. The spec (which is in file s-os_lib.ads, since GNAT.OS_Lib is a renaming of System.OS_Lib) now has a big warning about this.
Suppress warnings for “junk” names
The compiler now specially recognizes names containing any of the substrings DISCARD, DUMMY, IGNORE, JUNK, UNUSED (in any casing), and suppresses unreferenced, unmodified, and useless assignment warnings for such names, since these are typical names used when the warning would otherwise be expected. This reduces the need for pragma Unreferenced, Unmodified, or Warnings (Off) when such names are used.
Nov 26th, 2013
Better warning for elab problem with variable
A warning is given if a package initialization is used to initialize an otherwise uninitialized variable in the spec (because a client may access this variable prematurely). The warning for this situation has been made shorter and clearer.
GPS: new block completions available
Block completion now supports protected types and tasks.
Nov 25th, 2013
Support for large priority range
CodePeer now accepts large priority values when using pragma Priority, for compatibility with any target compiler.
Reason for pragma Warnings must be string literal
The optional Reason argument for pragma Warnings must now be either a string literal or a concatenation of string literals. This allows internal tools to access the resulting string for logging purposes.
Eliminate cascaded message from extra right paren
In some cases, the appearence of an extra right paren was correctly diagnosed but caused confusing cascaded errors, which have now been eliminated.
GPS: remove busy cursor
GPS no longer uses a "busy" cursor when it is doing long operations, since this is better replaced by the main progress bar. A busy cursor is typically hard to aim. The corresponding python API GPS.set_busy, GPS.unset_busy and GPS.get_busy have been removed.
Layout of extended return statement
The RM suggested layout for extended return statements has the END RETURN lining up with the start of the line containing the RETURN keyword (usually this is the RETURN keyword itself). This layout is now enforced in -gnatyl mode (check RM column layout).
More liberal formatting of IF/THEN with -gnatyi
The -gnatyi (style check IF/THEN) switch now permits the THEN to appear on the line following the IF. The THEN must appear on its own lined up with the IF, so the entire condition must fit on the IF line.
Nov 18th, 2013
Types with different sizes do not match statically
The use of the 'Object_Size attribute can cause otherwise statically matching subtypes to have different sizes. It was previously described as erroneous to (for example) convert between access types to such subtypes. The compiler now considers such conversions to be illegal. Formally, we have added another rule for static matching that the object sizes must be the same. In standard Ada, where the 'Object_Size attribute is not used, this is always the case. If it is absolutely necessary to force dubious conversions of this type, then Unchecked_Conversion can be used.
GPS: Use a fallback by name for cross references
The GPS cross reference engine will now use imprecise information from the completion engine to find the origin of an entity, so that it is able to resolve an entity by name, even when this entity is not visible in the lexical closure of the user's code
GPS: Integrate GNATcoverage detailed messages
The GNATcoverage plug-in in GPS can now get the detailed coverage messages for each line and display them in the location window. These messages can also be displayed inside the corresponding editors by clicking on the coverage status margin.
GPS: Menus described in menus.xml
GPS now describes its menu layout in an external file, which can be used to reorder menus or even hide some of them. As part of this refactoring, we detected that the icon 'Reload project' in the Project view was not working the same as the menu /Project/Reload, which has been fixed.
Nov 12th, 2013
New informational messages for limitations
CodePeer and codepeer_msg_reader now display new informational messages to report which modules or subprograms were skipped due to tool limitations as well as the modules that were included in the analysis.
Nov 8th, 2013
Parallel processing for gnatpp
A new gnatpp option '-jn' supports using up to n parallel processes, speeding up processing of large sets of sources. As in gnatmake, -j0 means use as many processes as there are cores available.
Nov 7th, 2013
Allow more complex expressions in preconditions
CodePeer now generates more precise preconditions able to represent complex expressions such as "A(I) in 1..10" or "'Max(X,Y) < Z," which internally involve array indexing or conditional computations.
GPS: Open shell from icons in Project View
Shell plugin extends contextual menu to lauch shell from Project View and others contexts where directory information available.
Nov 6th, 2013
Limited types with foreign convention not copied
A function whose return type is a limited type that has a foreign convention now builds its result in place instead of copying it into the target,
gnatpp: Line break controls
By default, gnatpp squeezes multiple blank lines down to one. The switch --preserve-blank-lines turns this feature off. The --insert-blank-lines switch causes gnatpp to insert blank lines in certain places (between bodies and other large constructs).
Parallel processing for gnatmetric
A new gnatmetric option '-jn' allows using up to n parallel processes, speeding up processing of large sets of sources. As in gnatmake, -j0 means use as many processes as there are cores available.
Warn for MIN/MAX used on unordered enumeration type
MIN and MAX operations are implicit comparisons. A warning is now given if either of these attributes is used on an unordered enumeration type (one for which pragma Ordered is not given) if the warning flag -gnatw.u is set.
Allow SPARK_Mode in -gnatyp mode
Normally -gnatyp insists on strict mixed-casing rules for pragma names, and thus would normally require Spark_Mode, but we now make a special case to allow SPARK_Mode as an alternative since this is more familiar usage.
Ignore case in matching specific Warnings (Off..)
If pragma Warnings (Off, string) is given to specify a pattern to be used to suppress warnings, then the comparison is now done in a case insensitive manner, so for example XYZ matches xyz. This is particularly useful when there is a need to match a specific identifier, since it removes the issue of how the identifier is cased.
GPS: Autofix to current file only
Autofix menu was extended with items to restrict fixing of simple errors and warnings to current file occurencies.
Nov 3rd, 2013
Parallel processing for gnatelim
A new gnatelim option '-jn' allows using up to n parallel processes, speeding up processing of large sets of sources.
gnatpp: Formatting of function specifications
Function specifications are now formatted according to the latest standard GNAT style. In particular, the "return T" part is placed on the same line as the preceding parameter if it fits, and if it doesn't fit, the type name is not aligned with the preceding parameter type.
gnatpp: Alignment of formal parameter modes
Formal parameter modes are now aligned (if alignment is enabled, and if the parameters do not all fit on one line).
gnatpp: Right-justification in record rep clauses
The position, first bit, and last bit of a component clause in a record representation clause are now aligned and right justified. For example:
X at 0 range 0 .. 127; Y at 0 range 128 .. 1023;