- Ada 2012
- Ada 2005 / 95 / 83
- Embedded Development
- Formal Methods
- Open Source
- Safety-Critical Development
- Static Analysis
AI-435 Storage_Pool/Size for access to subprogram
This AI forbids the use of Storage_Pool and Storage_Size attributes for access-to-subprogram types. These were previously allowed, but did nothing useful, and they are now flagged as illegal.
AI-310 Overloading ignores abstract subprograms
This AI specifies that in processing an overloaded call, interpretations of abstract non-dispatching operations need not be considered for resolution. This rule allows resolution of overloaded calls that were ambiguous in Ada 95. It allows the user to hide an inherited operation by declaring an abstract version that effectively hides the inherited one, a technique that is particularly useful with predefined numeric types.
AI-246 View conversions for by-reference arrays
This AI forbids view conversion between limited arrays whose components may have incompatible representation clauses. This is a language gap that was addressed two years ago by the ARG. GNAT treated this as a warning, because several ACATS tests used this now illegal construct. The ACATS suite has been updated and GNAT now diagnoses the error.
Apr 26th, 2005
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.
More efficient unbounded string handling
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.
New style check for unnecessary blank lines
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).
Apr 22nd, 2005
New package Ada.Wide_Characters.Unicode
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.
Obsolescent pragma and restriction
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.
Ada 2005 enhancement for pragma Obsolescent
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.
AI-395 Clarifications for Wide_[Wide_]Character
This AI is a grab bag of changes and additions to AI 295. Included are: allowing other format characters in string and character literals, changes in language defined names to keep width to 12, forbid FFFE/FFFF in all planes, and provide new packages Ada.Characters.Conversions and the dummy packages Ada.Wide_[Wide_]Characters. In addition the names used by Image/Value for wide characters are made uniform and simple (Hex_hhhhhhhh). Finally, new packages Ada.Wide_[Wide_]Characters.Unicode are added to provide unicode classification functions for wide character and wide wide character. These are GNAT defined packages, but are defined as children of the new AI-395 packages as recommended in the AI.
Apr 18th, 2005
Remove -f switch for gnatbind
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.
Apr 12th, 2005
Better msg for out of order pragma args
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.
Apr 11th, 2005
Detect bounded error from interrupt handler
When using the Ravenscar run times, calls to Current_Task from interrupt handlers are detected as bounded errors, and hence Program_Error is raised.
Output per-function stack usage
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.
Clearer message for configurable run times
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.
AI-348 Null procedures
Null procedures are declared by means of the syntax:
<procedure_specification> is null;Null procedures can also appear as defaults formal subprograms, in which case they are intrinsic in an instance. Null procedures do not require a completion, and cannot be used as completions.
Apr 2nd, 2005
Default secondary stack for Ravenscar
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.