=======================================================
Known problems in GNAT version 6.0.1 as of Mar 29, 2007
=======================================================

Copyright (c) 2007, AdaCore

The following is a listing of known problems in release 6.0.1. Except where
specifically noted, all these problems have been corrected in final release of
the 6.0 technology. It means they are corrected in release 6.0.2 and in any
wavefront issued subsequent to the date specified (in ISO format YYYY-MM-DD) in
the status line. This can be used to determine if a given wavefront has the fix
identified in the entry.

KP-601-G328-004 Use of gnatbind -R includes GNAT hierarchy sources in closure

  Problem:    When gnatbind is invoked with -R, it includes sources of the GNAT
              hierarchy in the list of sources of the closure.

  Status:     This was fixed in 6.1 on 2007-03-28

  Workaround: Disregard the GNAT hierarchy sources in the list.

KP-601-G327-012 All files rebuilt by gnatmake -s -E

  Problem:    When gnatmake is invoked with -s and compilation switch -E
              is used, gnatmake recompiles all sources.

  Status:     This was fixed in 6.1 on 2007-03-28

  Workaround: Do not invoke gnatmake with  -s when compilation switch -E
              is used.

KP-601-G322-041 Compiler crash on address clause with multiple conversions

  Problem:    The compiler crashes when processing an object declaration with
              an address clause at library level, if the address is computed
              from another address using at least two conversions to discrete
              types back and forth.

  Status:     This was fixed in 6.1 on 2007-03-23

  Workaround: Get rid of the conversions by manually computing the addresses.

KP-601-G322-028 Missing finalization of ancestor of extension aggregate

  Problem:    For an extension aggregate of a nonlimited type, where the parent
              part is an expression, as in (X with Y), the ancestor part
              (copied value of X) was not properly finalized.

  Status:     This was fixed in 6.1 on 2007-03-24

  Workaround: Avoid extension aggregates where the ancestor part is of a
              nonlimited controlled type; instead, use a function that
              does the same thing as the aggregate would.

KP-602-G322-016 Time_Error raised if result too large

  Problem:    On IVMS, the function "-" (Time, Time) raises Time_Error if the
              resulting Duration is large, but still within its valid range.

  Status:     This was fixed in 6.0.2 on 2007-03-23

  Workaround: Break down the difference into smaller differences and sum their
              results.

KP-601-G321-013 Incorrect handling of pragma Persistent_BSS

  Problem:    Compiler generates a Persistent_BSS directive for objects of
              a potentially persistent type, when the object declaration has
              an explicit initialization.

  Status:     This was fixed in 6.1 on 2007-03-23.

  Workaround: Remove expression from object declaration.

KP-601-G320-030 ASIS problem with actual objects having array type

  Problem:    If formal object has an unconstrained array type, then ASIS
              includes in the list of artificial declarations used as a
              means to pass generic actuals into the expanded template
              the subtype declaration that imposes the actual constraints
              onto the type of the formal object. This subtype declaration
              cannot be correctly processed by ASIS.

  Status:     This was fixed in 6.1 on 2007-03-21

  Workaround: Avoid applying any ASIS queries to such subtype declarations.

KP-601-G316-027 ASIS problem with defining name of expanded subprogram

  Problem:    If the generic subprogram is a child unit, and if the
              instantiation is not a child unit, the defining name ASIS
              obtains from the expanded body is of A_Defining_Expanded_Name
              kind (instead of A_Defining_Identifier or
              A_Defining_Operator_Symbol). ASIS hangs up when applying
              Corresponding_Name_Definition to the components of the prefix
              of this defining expanded name Element.

  Status:     This was fixed in 6.1 on 2007-03-18

  Workaround: Go from expanded body to the corresponding expanded spec and ger
              the defining name from it.

KP-601-G316-008 Problem with interface subtypes

  Problem:    The frontend may crash during the analysis of interface subtypes.
              As a side effect this causes problems with generic instantiations
              in which some actual is a class-wide interface type. In addition,
              the code generated for interface subtypes may be wrong and cause
              wrong behaviour of the program and unexpected exceptions.

  Status:     This was fixed in 6.1 on 2007-03-28

  Workaround: Avoid declarations of interface subtypes and instantiations in
              which some actual is a class-wide interface type.

KP-601-G316-004 Float_Text_IO reading too far

  Problem:    The "Get" routine in Float_Text_IO erroneously consumes a dot
              ('.') when the number before ends in an underscore ('_'). for
              example after reading from the string "2_.5", the next character
              to be read is 5.

  Status:     This was fixed in 6.1 on 2007-03-21

  Workaround: Avoid terminating numbers with an underscore. This only causes
              difficulties with strange sequences of illegal input.

KP-601-G316-001 Run-time interface type conversion is broken

  Problem:    The initialization of one component of the run-time data
              structure required to perform interface conversions is missing
              and causes unexpected exceptions at run-time.

  Status:     This was fixed in 6.1 on 2007-03-17

  Workaround: The support for static interface conversions is not broken (that
              is, interface conversions that can be clearly defined reading the
              sources of your program). Hence, the workaround is to avoid the
              use of interface conversions with class-wide interface types.

KP-601-G315-029 Access object with specified address is not default initialized

  Problem:    On the AAMP target only, an access object whose address is given
              by an attribute definition clause and that has no pragma Import
              is not default initialized to null.

  Status:     This was fixed in 6.1 on 2007-03-15

  Workaround: Add an explicit assignment of null to the object when needed.

KP-601-G315-024 Spurious error on self-referential access component

  Problem:    Compiler rejects an access component declaration of the form
              access P.T'class, where T is the enclosing record type.

  Status:     This was fixed in 6.1 on 2007-03-16

  Workaround: Use an identifier rather than an expanded name for the subtype
              mark.

KP-601-G315-023 Spurious visibility error on object of class-wide interface (2)

  Problem:    Compiler rejects an object declaration whose object_definition
              is a class-wide interface type given by a fully expanded name,
              if root type of the interface type is not immediately visible.

  Status:     This was fixed in 6.1 on 2007-03-15

  Workaround: Add a use clause before the object declaration.

KP-601-G315-022 Pragma Import applied to object renaming not flagged as error

  Problem:    The compiler accepts or blows up on a pragma Import for an object
              renaming, when it should issue an error.

  Status:     This was fixed in 6.1 on 2007-03-15

  Workaround: Remove the pragma.

KP-601-G315-016 Float_Text_IO failure

  Problem:    The "Get" routine of Float_Text_IO does not parse the terminating
              sharp ('#') sign of a based numeral. Eg: -8#.7#

  Status:     This was fixed in 6.1 on 2007-03-21

  Workaround: Try expressing the number as a non-based value.

KP-601-G315-014 Limited function calls using operator notation disallowed

  Problem:    If a function whose name is an operator symbol returns a limited
              type, function calls using operator notation are disallowed when
              they should be allowed. For example, "return X and Y;" was
              incorrectly disallowed (assuming "and" returns a limited type).

  Status:     This was fixed in 6.1 on 2007-03-15

  Workaround: Use "and"(X, Y) instead of X and Y.

KP-601-G315-010 Application crashes after unloading a plugin

  Problem:    After unloading a plugged in stand-alone shared library, using
              "dlclose" on GNU/Linux, the application may crash because
              finalization has occured.

  Status:     This was fixed in 6.1 on 2007-03-18

  Workaround: Reexecute the adainit procedure (declared with a pragma Import)
              immediately after unloading the plug in.

KP-601-G314-020 Imported variable of an access type is initialized to null

  Problem:    On the AAMP target only, an access variable with a pragma Import
              is default initialized to null, but it should take its value from
              the external object specified by Import.

  Status:     This was fixed in 6.1 on 2007-03-14

  Workaround: Wrap the access object in a record object with one component and
              use the pragma Import on the record object.

KP-601-G313-015 ASIS Corresponding_Base_Entity problem

  Problem:    When applied to a subprogram renaming,
              Asis.Declarations.Corresponding_Base_Entity unwinds only the
              first renaming, but not all the renamings in case of a
              ranaming chain.

  Status:     This was fixed in 6.1 on 2007-03-13

  Workaround: Manually apply Corresponding_Base_Entity in loop unitill it
              starts to return an argument Element.

KP-601-G312-006 ASIS Corresponding_Name_Definition problem

  Problem:    For a recursive generic subprogram,
              Asis.Expressions.Corresponding_Name_Definition fails if applied
              in the expanded body to the name of the result of the
              instantiation that is a part of the recursive call.

  Status:     This was fixed in 6.1 on 2007-03-21

  Workaround: To get the defining name, go to the call, apply to it
              Corresponding_Called_Function (or Corresponding_Called_Entity)
              and get the defining name from the result declaration.

KP-601-G309-029 Spurious visibility error with object of class-wide interface

  Problem:    Compiler rejects a compilation that includes a call to a
              subprogram Sub, when there is a previous object of the same
              name declared within a previous subprogram body in the current
              compilation unit, and the object is declared with an interface
              class-wide type and a suitable initial expression.

  Status:     This was fixed in 6.1 on 2007-03-14

  Workaround: Rename the subprogram to avoid the name conflict.

KP-601-G309-016 Spurious violation of No_Elaboration_Code with inlining

  Problem:    The use of inlining wrongly imports restriction
              No_Elaboration_Code from a withed package containing this
              restriction and a subprogram to be inlined.

  Status:     This was fixed in 6.1 on 2007-03-14

  Workaround: In units where No_Elaboration_Code is in effect, either do not
              mark subprograms with pragma Inline, or do not use inlining
              (-gnatn) on them.

KP-601-G309-015 Spurious visibility error on component of private extension

  Problem:    Compiler rejects a selected component X.A, when X is of a type
              T derived from a type T2, and T2 is derived from a private
              extension of a record type T3 of which A is a visible component.

  Status:     This was fixed in 6.1 on 2007-03-09

  Workaround: Introduce accessor functions for the component A, at the point
              of definition of type T2.

KP-601-G306-026 Spurious error with front-end inlining and 'address

  Problem:    Compiler rejects the front-end inlining of a subprogram when
              the actual corresponding to an in-parameter is constant-folded
              to a literal value, and the corresponding actual is the prefix
              of a 'Address attribute.

  Status:     This was fixed in 6.1 on 2007-03-07

  Workaround: Do not use pragma inline on that subprogram.

KP-601-G306-005 Compiler abort with front-end inlining and unconstrained return

  Problem:    Compiler aborts on the body of a generic function to be inlined
              by the front-end, when the return type of the function may be
              unconstrained (e.g. with unknown discriminants) if the body of
              the function has an empty list of declarations.

  Status:     This was fixed in 6.1 on 2007-03-08

  Workaround: Do not mark the function with pragma Inline, or do not use
              front-end inlining (-gnatN) on its compilation unit.

KP-601-G306-003 Spurious error on class-wide conversion and limited-with clause

  Problem::   Compiler rejects a type conversion in a package body P when the
              expression has a class-wide interface type declared in some
              other package P2, the spec of P has a limited_with_clause on P2,
              and the body of P has a normal with_clause on P2.

  Status:     This was fixed in 6.1 on 2007-03-07

  Workaround: If possible use a regular with_clause in the spec of P.

KP-601-G301-005 Wrong delay when setting clock backward

  Problem:    On Windows a delay could be longer than expected when
              the clock was set backward (either manually or by a
              DST adjustment) in a non tasking application.

  Status:     This was fixed in 6.1 on 2007-03-01

  Workaround: Use a delay until with a Real_Time clock instead.

KP-601-G228-026 Failure to copy ALI file of Stand-Alone Library

  Problem:    When a Stand-Alone Library is rebuilt, the ALI files of the
              interfaces cannot be copied because the destination file
              is read-only.

  Status:     This was fixed in 6.1 on 2007-02-28

  Workaround: Delete ALI files in the ALI copy dir before rebuilding the
              library.

KP-601-G227-018 Wrong initialization of interface components in aggregates

  Problem:    The code generated by the compiler to handle the initialization
              of an object by means of an aggregate as part of its declaration
              is incomplete if the object implements several interface types.
              This problem causes unexpected exceptions at run-time.

  Status:     This was fixed in 6.1 on 2007-03-01

  Workaround: Initialize the object after its declaration.

KP-601-G227-007 Compiler crash on Windows with large frame at -O -fstack-check

  Problem:    On Windows, the compiler may crash when emitting the assembly
              code for a library-level subprogram with a large stack frame,
              if it is not visible from outside the unit and when both
              optimization and stack checking are requested.

  Status:     This was fixed in 6.1 on 2007-03-01

  Workaround: Compile the unit without optimization.

KP-601-G227-004 Asis.Text problem with selective accept alternatives

  Problem:    Asis.Text.Element_Span returns wrong span beginning when applied
              to A_Select_Path or An_Or_Path that are components of selective
              accept statement, and Asis.Text.Element_Image blows up on these
              elements.

  Status:     This was fixed in 6.1 on 2007-03-23

  Workaround: Get text properties of such elements by applying Asis.Text
              queries to their components.

KP-601-G226-036 GNAAMP uses wrong size on assignment to mutable object

  Problem:    On the AAMP target only, when the target of an assignment is a
              unconstrained discriminated object, the compiler can copy an
              incorrect number of words, resulting in a partial copy of the
              source value.

  Status:     This was fixed in 6.1 on 2007-02-26

  Workaround: Enclose the discriminated type within a wrapper record type and
              assign objects of the wrapper type.

KP-601-G226-032 Spurious error on child instance with formal discrete type

  Problem:    Compiler rejects the instantiation of a child unit with a formal
              derived discrete type whose parent type is a formal type of the
              parent unit, when the parent is instantiated with some discrete
              type D and the child is instantiated with a subtype of D.

  Status:     This was fixed in 6.1 on 2007-02-26

  Workaround: Use a derived type with an explicit constraint for the actual
              in the instantiation of the child unit.

KP-601-G226-027 Problems with optimization when 'Address used

  Problem:    If the address of an object is taken, then the object can be
              modified via this address. Not clear exactly what official Ada
              requirements are here, but in practice it is desirable to allow
              this and make it work as expected. In some cases, the front end
              value tracking optimization did not pay attention to the use of
              the Address attribute, resulting in unexpected behavior.

  Status:     This was fixed in 6.1 on 2007-03-01

  Workaround: Compile with the -gnatdM switch which turns off this optimization
              completely in all situations, including the worrisome one.

KP-601-G224-009 Intermittent failure of Sockets.Create_Selector on Windows

  Problem:    On Windows, a call to 'bind' requesting a socket with a port that
              is not in use sometimes (rarely) returns a port that IS in use,
              causing a subsequent 'connect' to fail with EADDRINUSE. This
              causes GNAT.Sockets.Create_Selector to raise Socket_Error
              intermittently. We have worked around the problem by retrying
              the 'bind' operation when the 'connect' fails in this manner.

  Status:     This was fixed in 6.1 on 2007-03-04

  Workaround: Handle the exception, and retry the call to Create_Selector. It
              will usually succeed the second or third time.

KP-601-G223-013 Infinite loop for limited-private with clause on child unit

  Problem:    Compiler loops on the compilation of a unit body when the spec
              of the unit includes a limited private with clause on one of its
              child units.

  Status:     This was fixed in 6.1 on 2007-02-24

  Workaround: Make child unit non-private, or restructure system to avoid
              limited_with clauses on child units.

KP-601-G223-008 Asis.Expressions.Name_Image problem with generic actuals

  Problem:    Asis.Expressions.Name_Image may return wrong result or blow up
              if the argument is (a part of) a generic actual parameter.

  Status:     This was fixed in 6.1 on 2007-02-24

  Workaround: Get the image of the enclosing element and parse it.

KP-601-G223-005 Compiler crashes on 'address applied to in-mode actual

  Problem:    The compiler cannot handle 'address applied to in-mode actual,
              resulting in a Program_Error at run time.

  Status:     This was fixed in 6.1 on 2007-03-26

  Workaround: Avoid use of 'Address in this case, for example, by using an
              in-out or access parameter to directly access the parameter.

KP-601-G222-055 gnatpp problem with pragma in generic package

  Problem:    gnatpp blows up on a pragma if this pragma is the first element
              in the declaration sequence of a generic package, and its formal
              part is empty.

  Status:     This was fixed in 6.1 on 2007-02-22

  Workaround: Comment out or move, if possible, such a pragma.

KP-601-G222-049 Debugger crash when using the "dir" or "show dir" commands

  Problem:    The debugger may crash when using the "dir" or "show dir"
              commands. This only affects pa-hpux and alpha-osf.

  Status:     This was fixed in 6.1 on 2007-02-23

  Workaround: Use "set substitute-path" in place of the "dir" command.

KP-601-G222-042 gnatpp problem with loop parameter specification

  Problem:    Under a specific combination of layout parameters and lengths of
              the component of a loop parameter specification gnatpp does not
              put a space between the IN keyword and the next character.

  Status:     This was fixed in 6.1 on 2007-02-22

  Workaround: Add space between IN and the next character in the result of
              pretty-printing.

KP-601-G222-038 Compiler crash on slice of string with representation clause

  Problem:    The compiler crashes on the call to a subprogram taking a string
              parameter if the actual is a slice of a string which is a member
              of a record type with both full representation and size clauses.

  Status:     This was fixed in 6.1 on 2007-03-02

  Workaround: Remove either (part of) the full representation clause or the
              size clause on the record type.

KP-601-G222-027 Missing adjust when returning limited object

  Problem:    If a limited private type has a nonlimited full type, and this
              type is used as a component in another type, and the other type
              has a controlled component, and a global object of the other type
              is returned from a function, the compiler fails to correctly call
              Adjust on that controlled component.

  Status:     This was fixed in 6.1 on 2007-02-22

  Workaround: Make the first type nonlimited (that is, change "limited private"
              to "private").

KP-601-G222-012 Asis.Expressions.Corresponding_Name_Definition problem

  Problem:    Asis.Expressions.Corresponding_Name_Definition blows up when
              applied to a reference to a record component in case if the
              prefix of the reference is an 'Access or Unrestricted_Access
              attribute.

  Status:     This was fixed in 6.1 on 2007-02-22

  Workaround: Try to locate the needed defining name by analysing the
              corresponding record type definition that can be obtained from
              attribute prefix.

KP-601-G221-033 gnatpp and Asis.Text.Element_Span problem on '''

  Problem:    Asis.Text.Element_Span returns wrong result when applied to the
              character literal ''' This problem affects gnatpp, so it flows
              up if the argument source contains such literal.

  Status:     This was fixed in 6.1 on 2007-02-21

  Workaround: In ASIS application code, to get the span or text image of a
              character literal, get the text image of enclosing construct
              and analyze it manually. For gnatpp, replace ''' in the code
              with a named constant.

KP-602-G221-025 crash with limited with on child with array subtype

  Problem:    Compiler aborts on a constrained array declaration in a child
              unit P.Q,  when the parent P has a limited_with clause on P.Q.

  Status:     This was fixed in 6.1 on 2007-02-22

  Workaround: Move the declaration to the parent, or remove the limited_with.

KP-601-G220-027 Crash on illegal use of incomplete type

  Problem:    Compiler aborts on the use of the limited view of an untagged
              type used in the profile of an access to subprogram declaration.

  Status:     This was fixed in 6.1 on 2007-02-21

  Workaround: Do not write such an illegal declaration.

KP-601-G219-044 Crash on ambiguous membership test on character literals.

  Problem:    Compiler aborts on an ambiguous membership test of the form:
              'S' in 'A' .. 'Z' (all untyped character literals).

  Status:     This was fixed in 6.1 on 2007-02-20

  Workaround: Do not write such illegal tests (add qualification to resolve
              the ambiguity).

KP-601-G219-028 Wrong accessibility level for aliased actual in prefixed call

  Problem:    The compiler passes the wrong accessibility level when an aliased
              object is used as the prefix in a call to a subprogram using
              Object.Operation notation and the corresponding formal is an
              access parameter. This can lead to dangling references if the
              formal is converted (including implicitly) within the called
              subprogram and the level of the aliased object is deeper than
              the level of the target type of the conversion.

  Status:     This was fixed in 6.1 on 2007-03-07

  Workaround: Use the normal form of call (without a prefix), or ensure that
              the aliased object used as the prefix does not have a deeper
              level than any access type that the formal parameter might be
              converted to within the called subprogram.

KP-601-G219-010 Memory explosion on code using Duration compiled with -gnato

  Problem:    The compiler exhausts the memory and eventually aborts while
              compiling expressions involving the standard Duration type
              if -gnato is specified.

  Status:     This was fixed in 6.1 on 2007-02-01

  Workaround: Compile the unit without -gnato.

KP-601-G216-050 Compiler rejects call to function with anonymous access result

  Problem:    The compiler flags a legal dispatching call in an assignment
              statement to an access variable when the function called on the
              right-hand side has an anonymous access result, complaining that
              a dynamically tagged expression is not allowed there.

  Status:     This was fixed in 6.1 on 2007-03-05

  Workaround: Rewrite the call to use prefix notation when possible.

KP-601-G216-048 Crash on access procedure as actual in instance

  Problem:    Compiler aborts on an instantiation, when an actual for a private
              type is named access_to_subprogram, the profile of this access
              type includes the class-wide type of a private type T whose full
              view has not been seen yet, and the body of the generic includes
              a subprogram that uses the type.

  Status:     This was fixed in 6.1 on 2007-02-19

  Workaround: Move the instantiation past the full declaration of T.

KP-601-G216-031 Loop in compiler with malformed named actual

  Problem:    The compiler loops on a call with named associations, when an
              expression containing an illegal character appears after
              several named associations, and semantic analysis is forced
              by using the -gnatQ switch.

  Status:     This was fixed in 6.1 on 2007-02-20

  Workaround: Do not write such illegal code, or remove the -gnatQ switch.

KP-601-G216-009 Ada.Directories.Containing_Directory not raising Use_Error

  Problem:    When Ada.Directories.Containing_Directory is called with
              a root directory, exception Use_Error is not raised and
              the argument is returned.

  Status:     This was fixed in 6.1 on 2007-02-25

  Workaround: Check the returning value: it should never be equal to the
              argument.

KP-601-G215-025 Asis.Expressions.Name_Image problem with 'Image attribute

  Problem:    Asis.Expressions.Name_Image blows up when applied to an 'Image
              attribute designator if it is a part of a generic actual
              parameter.

  Status:     This was fixed in 6.1 on 2007-02-15

  Workaround: Compute the image from the Attribute_Kind value of enclosing
              An_Attribute Element.

KP-601-G214-032 Race condition in handling of ATC construct and exceptions

  Problem:    In some cases, when mixing asynchronous transfer of control (ATC)
              and exceptions (e.g. Tasking_Error), the exception may not be
              properly raised. A typical example is the ACATS test C974005
              which may fail intermittently.

  Status:     This was fixed in 6.0.2 on 2007-02-27

  Workaround: Avoid using ATC constructs.

KP-601-G214-027 GNAAMP causes bounds corruption with unconstrained-array access

  Problem:    On the AAMP target only, the compiler generates incorrect code
              for 'Access when the type is an access type with an unconstrained
              array designated subtype. The array bounds information associated
              with the access value can be corrupted.

  Status:     This was fixed in 6.1 on 2007-02-22

  Workaround: Use access-to-array types with a constrained designated subtype,
              and add constraints to the declarations of aliased array objects
              designated by values of the access type.

KP-601-G214-012 Asis.Declarations.Corresponding_Body problem

  Problem:    Asis.Declarations.Corresponding_Body blows up under the
              following conditions: the argument is a protected entry
              declaration, it is located in a library package, and a tree
              accessed by the ASIS implementation contains only the spec of
              this package.

  Status:     This was fixed in 6.1 on 2007-02-14

  Workaround: Get to the unit representing the package bosy, traverse the unit
              to get the same entry declaration and apply Corresponding_Body.

KP-601-G214-005 Asis.Elements.Enclosing_Element problem

  Problem:    Asis.Elements.Enclosing_Element returns wrong result when
              applied to a defining name from a single task or protected
              declaration.

  Status:     This was fixed in 6.1 on 2007-02-16

  Workaround: Try to find an enclosing element by traversing the enclosing
              compilation unit.

KP-601-G214-001 Standard GDB type coercion expression not assignable

  Problem:    The standard GDB syntax {TYPE} ADDRESS means "the variable
              at memory address ADDRESS, treated as if it had type TYPE."
              This is not Ada syntax, but is documented as a GDB extension
              that is supposed to be available for all languages.  The
              resulting variable is supposed to be assignable, allowing for
              example,
                  set {Integer} 0xff123456 := 42
              But this does not work.

  Status:     This was fixed in 6.1 on 2007-02-14

  Workaround: The syntax is largely superfluous, since you can write
                  set Integer'Access(0xff123456).all := 42
              instead.

KP-601-G213-010 GNAT.Expect.Send error when sending long string

  Problem:    The implementation is copying the string on the stack, which
              limits the maximal size of the string to send to the external
              process to the maximum stack size.

  Status:     This was fixed in 6.1 on 2007-02-13

  Workaround: Do several calls to Send, passing substrings each time.

KP-601-G212-013 Missing accessibility check on anonymous access return object

  Problem:    An assignment to an anonymous access return object within an
              extended return statement is incorrectly allowed in cases where
              the access type of the right-hand side has a level deeper than
              the level of the containing function's result type.

  Status:     This was fixed in 6.1 on 2007-03-07

  Workaround: Do not write such illegal assignments.

KP-601-G212-015 Incorrect interrupt handling for RTP mode in VxWorks 6

  Problem:    The interrupt support packages in the run time for Real Time
              Processes (RTPs) use routines to directly access hardware
              interrupts that are not allowed to RTP (only to kernel tasks).

  Status:     This was fixed in 6.0.2 on 2007-03-23

  Workaround: Use signal handling routines directly.

KP-601-G208-004 Declaring a limited interface pulls in tasking

  Problem:    The internally generated predefined primitives for limited and
              synchronized interfaces reference entities from System.Tasking.

  Status:     This was fixed in 6.1 on 2007-02-15

  Workaround: If possible, make the interface non-limited.

KP-601-G207-023 Wrong code for subprogram with array parameter and tail call

  Problem:    The compiler may generate wrong code at -O2 on x86 for a
              subprogram taking a small array of scalars as one of its
              parameters if one of the possible paths of control exiting the
              subprogram ends with a call which passes a parameter that is an
              element of the array. This problem appears only in versions of
              GNAT using the GCC back end (in particular it does not appear on
              GNAAMP). It also does not appear if the index of the array
              element is constant.

  Status:     This was fixed in 6.1 on 2007-02-08

  Workaround: Use the -fno-optimize-sibling-calls compiler switch.

KP-601-G207-001 Task interfaces do not inherit overridden operations

  Problem:    The subprograms and entries of a task type declared within a
              generic implementing an interface do not properly override
              the inherited interface primitives.

  Status:     This was fixed in 6.1 on 2007-02-17

  Workaround: Avoid the usage of overriding indicators and task primitives
              which have the same name as some of its entries.

KP-601-G205-010 Imported exception cannot unwind through non-GCC code on VMS

  Problem:    On VMS, an imported exception causes the GCC unwinder code
              to abort when attempting to unwind through non-GCC compiled
              code, due to differences in the VMS ABI.

  Status:     This was fixed in 6.1 on 2007-02-19

  Workaround: Catch the exception in foreign code, and return a status
              indicator showing if the exception occurred.

KP-601-G205-001 Dynamic memory cannot be used within protected actions on LEON

  Problem:    On LEON, with the full run time, the use of dynamic memory
              routines within protected actions does not respect the ceiling
              locking rules.

  Status:     This was fixed in 6.1 on 2007-02-06

  Workaround: Provide an alternate implementation of the low level memory
              allocation/deallocation routines.

KP-601-G203-002 Compiler crash on Windows with aggregate containing null string

  Problem:    On Windows (either the native compiler, or any cross compiler
              using a Windows host), the compiler crashes if an aggregate built
              for a discriminated record type, one field of which is a string
              with 1 as lower bound and the discriminant as upper bound and
              which contains at least another field, sets the discriminant to
              0 and the string field to the null string.

  Status:     This was fixed in 6.1 on 2007-02-04

  Workaround: Use the named form with "others" to set the string field or move
              the field to the last position in the record.

KP-601-G202-029 Failure to link statically with external linker

  Problem:    When an external linker is used (gnatlink switch --LINK=)
              and it is not GCC, the switch -static-libgcc added automatically
              to invoke this external linker may cause the link to fail.

  Status:     This was fixed in 6.1 on 2007-02-09

  Workaround: Use a wrapper to strip the switch -static-libgcc from the
              invocation of the external linker.

KP-601-G202-021 Compiler crash on primitive function body with limited result

  Problem:    The compiler blows up on a return statement within a primitive
              function with a limited controlling result type in the case
              where the function body does not have a separate declaration.

  Status:     This was fixed in 6.1 on 2007-02-06

  Workaround: Add a separate declaration for the function.

KP-601-G202-008 gnatpp problem with comment after left parenthesis

  Problem:    gnatpp may blow up if the argument source contains a comment
              immediately after a left parenthesis.

  Status:     This was fixed in 6.1 on 2007-02-21

  Workaround: Reorganize comments in the source to avoid these situations.

KP-601-G202-005 Wrong interface conversion on tagged type with discriminants

  Problem:    The compiler generates a wrong layout on a tagged type T whose
              parent has discriminants, and T implements interface types and
              also has controlled components. As a result of the wrong layout
              the run-time support for interface conversions on objects of
              type T fails causing exceptions or other invalid execution
              behavior on dispatching calls.

  Status:     This was fixed in 6.1 on 2007-02-12

  Workaround: Avoid the use of discriminants in the parent of T or move the
              controlled components to the parent of T.

KP-601-G202-001 Spurious error with interface in instantiation

  Problem:    Compiler rejects the instantiation of a package with a derived
              interface formal I and a formal package whose actual is I.

  Status:     This was fixed in 6.1 on 2007-02-02

  Workaround: Use an abstract type rather than an interface as the parent
              type of the formal type.

KP-601-G201-023 Crash in Ada2005 mode on task with access discriminant

  Problem:    Compiler aborts on the instantiation of a package whose body
              declares a task with an access discriminant, when compiled
              in Ada2005 mode.

  Status:     This was fixed in 6.1 on 2007-02-05

  Workaround: Use a named access type for the discriminant

KP-601-G201-007 Missing check on "not null" conformance for access parameters

  Problem:    The compiler fails to reject an overriding subprogram with an
              access parameter, when the "not null" indicators in the inherited
              operation and the overriding operation do not match.

  Status:     This was fixed in 6.1 on 2007-02-05

  Workaround: Do not write such illegal declarations.

KP-601-G201-004 Incorrect optimization when access to local subprogram used

  Problem:    If an access to a local subprogram is taken, and passed directly
              or indirectly to a global subprogram, which calls the local sub-
              program, which in turn modifies the value of a local variable,
              the optimization circuits do not notice this indirect assignment,
              resulting in an incorrect value being used.

  Status:     This was fixed in 6.1 on 2007-02-03

  Workaround: Make the variable in question volatile.

KP-601-G131-032 Crash when integrated preprocessing fails

  Problem:    The compiler may crash when integrated preprocessing fails
              to preprocess a source.

  Status:     This was fixed in 6.0.2 on 2007-03-22

  Workaround: Use gnatprep to find the preprocessing error(s) and correct
              them before compiling again.

KP-601-G131-029 Spurious Storage_Error in complex loop with optimization

  Problem:    The compiler generates wrong code at -O1 and above for a complex
              loop making a conditional array access, for the index of which
              there exists at least one theoritical code path where it is
              uninitialized, leading to a spurious Storage_Error at runtime.

  Status:     This was fixed in 6.1 on 2007-02-03

  Workaround: Additionally pass -fno-tree-loop-im to the compiler or provide
              a valid value for the index on the code path.

KP-601-G131-026 Heap-allocated built-in-place objects finalized too early

  Problem:    If the full view of a type is limited, and the type is controlled
              or has controlled parts, and an object of that type is allocated
              on the heap, and initialized with a function call, the compiler
              generates code to finalize the heap-allocated object too
              early. In particular, the object is finalized when leaving the
              scope of the allocator, whereas it should be finalized when
              leaving the scope of the access type returned by the allocator.

  Status:     This was fixed in 6.1 on 2007-02-08

  Workaround: Make the type in question non-limited.

KP-601-G131-004 Error in renaming of library level composite function result

  Problem:    The compiler generates wrong code for the renaming of the result
              of the call to a function returning a composite type, when the
              renaming is done at the library level.

  Status:     This was fixed in 6.1 on 2007-02-10

  Workaround: Use an assignment instead of renaming.

KP-601-G130-008 Spurious error with generic dispatching constructor

  Problem:    The compiler generates spurious errors allocating limited tagged
              objects built in place through generic dispatching constructors.

  Status:     This was fixed in 6.1 on 2007-01-30

  Workaround: Use pragma suppress to disable the expansion of run-time checks
              associated with the allocator.

KP-601-G130-002 Error in renaming of library level scalar function result

  Problem:    The compiler generates wrong code for the renaming of the result
              of the call to a function returning a scalar type, when the
              renaming is done at the library level.

  Status:     This was fixed in 6.1 on 2007-01-31

  Workaround: Put a Pragma Pure_Function on the renamed function, if it is
              appropriate to do so, or use an assignment instead of renaming.

KP-601-G129-026 Incorrect handling of signals under ia64-linux

  Problem:    When using Ada.Interrupts facilities on ia64-linux, an
              unaligned memory access may be observed in some cases.

  Status:     This was fixed in 6.0.2 on 2007-02-14

  Workaround: Either ignore the unaligned access message, or call sigaction()
              directly to handle signals.

KP-601-G126-003 Compiler crash for generic task interface

  Problem:    The compiler fails to resolve a selected component with a prefix
              of a concurrent type implementing an interface, when occurring
              inside a generic and having a selector that names an overriding
              operation.

  Status:     This was fixed in 6.1 on 2007-02-05

  Workaround: Do not use prefix notation.

KP-601-G126-002 Error on prefixed call to class-wide interface subprogram

  Problem:    When using the object-prefix form of call to a class-wide
              interface subprogram, the compiler can fail to resolve the
              call in cases where the type of the prefix object implements
              the interface but the interface is not implemented by the
              type's parent type.

  Status:     This was fixed in 6.1 on 2007-01-31

  Workaround: Use normal call notation for calling the class-wide subprogram
              (and adding an expanded name in the call if needed, or adding
              a use clause for the declaring package).

KP-601-G125-040 Parameter value not printed by debugger in frame description

  Problem:    When hitting a breakpoint inside a function, the debugger
              prints a short description of the current frame which includes
              the current function name and its parameters. The debugger
              sometimes prints the name of a parameter without printing its
              value (for instance "foo.bar (a=1, r=)"). This may happen in
              backtraces as well.

  Status:     This was fixed in 6.1 on 2007-01-25

  Workaround: Manually print the parameter value using the "print" command.

KP-601-G125-022 Crash on interface type conversion with limited-withed type

  Problem:    The compiler blows up if a class-wide interface type conversion
              involves a type available though a limited-with clause.

  Status:     This was fixed in 6.1 on 2007-01-26

  Workaround: Add a with clause to the compilation unit containing the
              interface type conversion.

KP-601-G125-019 Function returning null access to class-wide interfaces

  Problem:    At run time, a function returning a null access to a class-wide
              interface breaks the execution of the program.

  Status:     This was fixed in 6.1 on 2007-01-25

  Workaround: Add an explicit check before the return statement to ensure that
              such a function never returns a null value.

KP-601-G125-006 Wrong management of anonymous access type components

  Problem:    The compiler does not handle well components that are anonymous
              access to constants or have a null-exclusion.

  Status:     This was fixed in 6.1 on 2007-01-26

  Workaround: Avoid the use of components that are anonymous access to
              constants or have a null exclusion, or else use the GNAT Pro
              attribute 'Unrestricted_Access to initialize such components.

KP-601-G125-004 Crash with null package body

  Problem:    In Ada 2005 mode, a package body with no declarations can cause
              a compiler crash. Such null package bodies can only exist if the
              spec has an Elaborate_Body pragma.

  Status:     This was fixed in 6.1 on 2007-02-19

  Workaround: Add an arbitrary declaration to the package body. Any declaration
              will do, it does not have to be used.

KP-601-G124-007 Spurious errors with formal interfaces

  Problem:    Compiler fails to find the ancestor of a formal interface type
              in a generic, when it is used as an actual in a subsequent formal
              package.

  Status:     This was fixed in 6.1 on 2007-01-24

  Workaround: Rewrite formal type declaration as a formal derived type.

KP-601-G124-001 Protected interface does not inherit procedures

  Problem:    The compiler fails to recognize a subprogram with an access-to-
              class-wide interface parameter which belongs to a protected type
              implementing an interface as overriding an inherited subprogram.

  Status:     This was fixed in 6.1 on 2007-02-05

  Workaround: Do not use a class-wide type.

KP-601-G123-014 Limited type implementing nonlimited interface not flagged

  Problem:    The compiler fails to report an error on a type extension that
              derives from a limited parent type and also implements a
              nonlimited interface, unless the type extension is explicitly
              declared as limited.

  Status:     This was fixed in 6.1 on 2007-01-24

  Workaround: Don't write such type extensions. Add keyword limited to the type
              declaration to ensure that such errors are flagged.

KP-601-G122-029 Infinite loop during finalization of array of arrays

  Problem:    If a program has a record type with a component that is an
              array of arrays of controlled types, initialized with an
              aggregate, and the program includes a default-initialized
              variable of this record type, the program goes into an infinite
              loop during finalization.

  Status:     This was fixed in 6.1 on 2007-01-23

  Workaround: Initialize the variable with an explicit loop.

KP-601-G122-008 Crash on anonymous return type with limited-with

  Problem:    Compiler aborts on an instantiation of a generic unite that
              contains a function body, when the return type of the function
              is an anonymous access-to-classwide type whose designated type
              is obtained through a limited_with clause.

  Status:     This was fixed in 6.1 on 2007-01-26

  Workaround: Use a named access for the return type.

KP-601-G119-020 Exception table corruption for exception declared in subprogram

  Problem:    If an exception is declared within a procedure, and the procedure
              is called by multiple tasks at the same time, then the table that
              is constructed for handling streaming of exception names can be
              corrupted, resulting in a failure of stream attributes for the
              type Ada.Exception_Id.

  Status:     This was fixed in 6.1 on 2007-01-30

  Workaround: Declare the exception at the library level.

KP-601-G119-012 gnatpp blows up if there is no space between a literal and :=

  Problem:    gnatpp blows up if a numeric literal is immediately followed
              by an assignment.

  Status:     This was fixed in 6.1 on 2007-01-19

  Workaround: Put a space between a literal and ':='.

KP-601-G118-019 Crash on null-excluding access to subprogram type

  Problem:    Compiler aborts on not-null applied to access to subprogram
              type declarations.

  Status:     This was fixed in 6.1 on 2007-01-23

  Workaround: Remove not-null and add explicit code to verify that the
              value of the objects are not null.

KP-601-G118-011 Crash on comparison of anonymous access to subprogram types

  Problem:    Compiler aborts on a comparison of two anonymous access to
              subprogram types that are subtype conformant.

  Status:     This was fixed in 6.1 on 2007-01-22

  Workaround: Use a common named access type for both objects.

KP-601-G118-003 Missing implicit conversions of class-wide interfaces

  Problem:    In programs that combine a class-wide interface and limited with
              clauses, the compiler generates incorrect code for implicit
              conversions involving the class-wide interface (or an access to
              the interface), causing exceptions or other invalid execution
              behavior on dispatching calls.

  Problem:    The combination of access to class-wide interfaces and limited
              withed packages is not properly handled by the frontend. As a
              consequence of this problem the compiler does not generate the
              code associated with implicit interface conversions associated
              with the access to class-wide interface resulting in wrong
              dispatching through such class-wide interfaces.

  Status:     This was fixed in 6.1 on 2007-01-22

  Workaround: Add explicit conversions to the class-wide interface type.

KP-601-G117-018 Asis.Expressions.Corresponding_Name_Definition problem

  Problem:    The ASIS Corresponding_Name_Definition query returns non-nil
              result when applied to the reference to a predefined "&"
              operator of a derived array type.

  Status:     This was fixed in 6.1 on 2007-01-18

  Workaround: If the argument of Corresponding_Name_Definition is of
              A_Concatenate_Operator kind and the result is not Nil_Element,
              check if Enclosing_Element of the result is either a function
              declaration, a function body, a function instantiation or
              a function renaming, and if it is not, replace this result with
              Nil_Element.

KP-601-G117-001 Spurious error with multiple inheritance in an instance

  Problem:    The compiler rejects operations in prefix form within an
              instantiation, when the generic unit has a generic derived type
              whose ancestor is an interface I, and the corresponding actual
              in the instance is a derived type whose parent type T is not
              a direct descendant of I.

  Status:     This was fixed in 6.1 on 2007-01-19

  Workaround: Make the actual into a descendant of I, with a T component.

KP-601-G116-022 Spurious error on use of 'Access applied to current instance

  Problem:    The compiler reports an accessibility error when 'Access applied
              to the current of a limited type is used to constrain an access
              discriminant of a nonlimited component.

  Status:     This was fixed in 6.1 on 2007-01-23

  Workaround: Substitute Unchecked_Access for the Access attribute.

KP-601-G116-013 Run-time problem registering locally defined tagged types

  Problem:    The concurrent elaboration of locally defined tagged types may
              cause a race condition that breaks the run-time structure used
              to register the tag.

  Status:     This was fixed in 6.1 on 2007-02-17

  Workaround: Declare the tagged types at the library level.

KP-601-G116-012 Missing support for remote access to limited controlled type

  Problem:    Using a limited controlled type as the designated type for
              a remote access to classwide type was impossible because
              a pragma Remote_Types was missing from the Ada.Finalization
              package declaration, and the supporting compiler circuitry
              behaved incorrectly in the presence of such declarations.

  Status:     This was fixed in 6.1 on 2007-01-24

  Workaround: Use a non-controlled limited type as the designated type for
              the remote access-to-classwide type, and add a limited
              controlled component in a derived type declared in a normal
              package.

KP-601-G116-010 Compiler fails to reject illegal component declaration

  Problem:    The compiler accepts a component or discriminant declaration with
              multiple identifiers, when some identifier in the list after the
              the first is a homograph of the subtype mark in the subtype
              indication of the declaration.

  Status:     This was fixed in 6.1 on 2007-01-16

  Workaround: Do not write such illegal declarations.

KP-601-G116-002 Wrong allocation of class-wide interface objects

  Problem:    The frontend does not handle well the allocation of class-wide
              interface objects initialized with a qualified expression.

  Status:     This was fixed in 6.1 on 2007-01-21

  Workaround: Avoid the initialization of class-wide interface objects with
              qualified expressions.

KP-601-G116-001 Memory explosion on complex expression with fixed point type

  Problem:    The compiler exhausts the memory and eventually aborts while
              compiling a complex expression involving arithmetic operations
              on fixed point type.

  Status:     This was fixed in 6.1 on 2007-02-01

  Workaround: Factor out common patterns in the expression into functions.

KP-601-G115-006 Start command stops at wrong location on ia64

  Problem:    On ia64 machines, the start command sometimes stops at the wrong
              location, past the first statement of the main program.

  Status:     This was fixed in 6.1 on 2007-03-07

  Workaround: Break on the first line of the main program and then start
              the program using either "run" or "start".

KP-601-G112-019 Accessibility error on allocator for anonymous access return

  Problem:    The compiler reports an accessibility error when assigning an
              allocator to an object with an anonymous access type declared
              as a return object in an extended return statement.

  Status:     This was fixed in 6.1 on 2007-01-13

  Workaround: Move the initialization to a separate assignment statement within
              the extended return statement.

KP-601-G111-022 Crash on illegal declaration in shared passive unit

  Problem:    Compiler aborts on a single task declaration in a package
              declared Shared Passive.

  Status:     This was fixed in 6.1 on 2007-01-11

  Workaround: Do not write such illegal declarations.

KP-601-G111-020 Missing initialization for exceptions with no tasking on LEON

  Problem:    On LEON, using the full run time, when a program uses exceptions
              without any tasks, the run time is not properly initialized and
              hence the behavior may be incorrect.

  Status:     This was fixed in 6.1 on 2007-02-05

  Workaround: Use a different run time or add any tasking construct (such as
              a task type definition) to force a proper initialization of the
              tasking run time.

KP-601-G110-006 Crash on access to protected function with anonymous return

  Problem:    Compiler aborts on a declaration of an access to protected
              function when its return type is any anonymous access to
              subprogram.

  Status:     This was fixed in 6.1 on 2007-01-11

  Workaround: Use a named access type as the return type.

KP-601-G109-003 Incorrect literal read by Enumeration_IO

  Problem:    An incorrect enumeration literal value (in particular one with
              bad extra characters in it, e.g. LITERAx00000L read as LITERAL)
              can be accepted by Ada.Text_IO.Enumeration_IO.Get.

  Status:     This was fixed in 6.1 on 2007-01-19

  Workaround: Read in the literal as a string, and use 'Value attribute to
              convert it to an enumeration value (which will raise a constraint
              error exception for a bad value).

KP-601-G108-019 Spurious error on renaming of grand-child unit in with_clause

  Problem:    Compiler rejects a with_clause that mentions a child unit whose
              parent is a renaming of a descendant of another child unit.

  Status:     This was fixed in 6.1 on 2007-01-09

  Workaround: Use full name of desired child unit, rather than the renamed
              name of its parent: if  A renames X.Y.Z, then instead of
                 with A.T;
              write
                 with X.Y.Z.T;

KP-601-G108-015 Pragma Pack increases the size of record with variant part

  Problem:    The compiler bumps the alignment and size of a record with
              a variant part when it is subject to a pragma Pack clause.

  Status:     This was fixed in 6.1 on 2007-01-19

  Workaround: Do not use pragma Pack for the record, instead lay out the record
              using a record representation clause that specifies the position
              of every field in the record. In addition set the alignment value
              that is desired if necessary to get the expected size.

KP-601-G105-013 GNAAMP produces wrong object file names with Source_Reference

  Problem:    On the AAMP target only, when a Source_Reference pragma is given,
              the compiler produces object files whose name is based on the
              file name given in the pragma.

  Status:     This was fixed in 6.1 on 2007-01-09

  Workaround: Avoid the use of Source_Reference pragmas. In particular, don't
              use the -r option when running gnaampchop.

KP-601-G104-012 Debugger fails to print value of array field inside record

  Problem:    The debugger is sometimes unable to print the value of an array
              if it is a field inside a record, and prints "(...?)" instead.

  Status:     This was fixed in 6.1 on 2007-01-25

  Workaround: Add a procedure in your program that prints the value
              of the record on Standard Output, and call this routine
              from the debugger.

KP-601-FC28-002 Wrong return code when all warnings suppressed (2006-12-31)

  Problem:    If a program generates warnings that are suppressed using the
              specific message text string form of pragma Warnings (Off), and
              there are no other warnings or errors, and the -gnatwe (treat
              warnings as errors) switch is set, then the compilation does not
              generate any messages, but the return code still indicates that
              there were errors, causing gnatmake to decide that the
              compilation failed.

  Status:     This was fixed in 6.1 on 2006-12-31

  Workaround: Avoid use of -gnatwe in this situation

KP-601-FC26-004 Failure to diagnose bad NOT NULL syntax

  Problem:    The syntax "type s is not null new r" is incorrect, it should be
              "new not null", but this error was not diagnosed.

  Status:     This was fixed in 6.1 on 2006-12-27

  Workaround: Use the correct syntax for this construct.

KP-601-FC24-001 Configuration pragma Discard_Names too global in effect

  Problem:    If a client with's a unit that had a Discard_Names pragma as
              a configuration pragma, then the client inherits the effect of
              the pragma.

  Status:     This was fixed in 6.1 on 2006-12-24

  Workaround: Use the pragma within relevant declaration sequences instead of
              using it as a configuration pragma.

KP-601-FC22-008 Missing constraint check on conversion of slice

  Problem:    A type conversion of a slice to an unconstrained array type
              fails to raise a constraint error when the bounds of the slice
              are not compatible with the bounds of the index type of the
              target type.

  Status:     This was fixed in 6.1 on 2007-01-04

  Workaround: Do not write such conversions, which will fail anyway.

KP-601-FC21-018 Crash on controlled actual in asynchronous select

  Problem:    The compiler aborts on a procedure call appearing in the optional
              statement list in the triggering alternative of an asynchronous
              select statement, when an actual in the call is itself a call to
              a function that returns a controlled type.

  Status:     This was fixed in 6.1 on 2006-12-21

  Workaround: Place the procedure call within a local block statement.

KP-601-FC21-012 Tornado debugger start command fails

  Problem:    The "start" command in the debugger for Tornado can sometimes
              fail, and report a "Function .. not defined" error message.
              This error only occurs when, after having debugged a first
              program, a new debugging session of a different program is
              attempted without having exited the debugger first.

  Status:     This was fixed in 6.1 on 2006-12-23

  Workaround: Insert a temporary breakpoint in your main procedure, and
              use "run" instead. Alternatively, restart the debugger
              before debugging the second program.

KP-601-FC19-025 Spurious visibility errors with multiple formal packages

  Problem:    The compiler reports spurious ambiguities when multiple formal
              packages with partial parameterization have formal generic
              parameters with the same name and with the same name as some
              formal of the enclosing generic unit. This may manifest itself
              in instantiations of the Ada 2005 linear algebra packages for
              complex arrays.

  Status:     This was fixed in 6.1 on 2006-12-21

  Workaround: Introduce a subtype in the enclosing generic to make the entity
              immediately visible from the proper formal package.

KP-601-FC15-002 Spurious errors with limited class-wide interface types

  Problem:    The compiler rejects a function that returns a limited class-
              wide interface type, when the returned object is an extension
              aggregate for a type that implements the interface.

  Status:     This was fixed in 6.1 on 2007-02-09

  Workaround: Use an access for the return type, and an explicit allocator.

KP-601-FC08-017 debugger crash with packed arrays

  Problem:    Displaying a packed array in GPS may crash the debugger.

  Status:     This was fixed in 6.1 on 2007-01-31

  Workaround: type graph display `print var1` in the debugger console.

KP-601-FC08-012 Incorrect behavior of -gnatVi with packed arrays

  Problem:    If a unit compiled with -gnatVi has references to a component
              of a packed array that is a record, then incorrect code may be
              generated, resulting in an unexpected data validity exception.

  Status:     This was fixed in 6.1 on 2006-12-22

  Workaround: Avoid the use of -gnatVi when compiling the affected unit.

KP-601-FB30-015 debugger crash with malformed debug info

  Problem:    When loading an executable, if no file name information is
              given in the line information of a compilation unit, the debugger
              will crash. This can happen when part of the application is
              compiled with a third-party compiler.

  Status:     This was fixed in 6.1 on 2007-02-15

  Workaround: Remove this debug info (e.g. using strip).

KP-601-FA27-010 Debugger crash with tagged unconstrained record

  Problem:    The debugger may crash when printing an instance of a derived
              type if both the derived type and its ancestor are unconstrained.

  Status:     This was fixed in 6.1 on 2007-01-25

  Workaround: Move the unconstrained part to the derived type.

KP-601-F912-013 Cannot replace Unchecked_Conversion and Unchecked_Deallocation

  Problem:    The packages Unchecked_Conversion and Unchecked_Deallocation are
              obsolescent renamings defined in Annex J. It should be possible
              to replace them with user packages of the same name, but GNAT
              did not permit this usage (or rather permitted it with peculiar
              results, since other units in the run time used these packages).

  Status:     This was fixed in 6.1 on 2006-12-22

  Workaround: Avoid naming user packages by these two names.

KP-601-F822-011 Spurious error with Unrestricted_Access on protected operation

  Problem:     Compiler rejects a use of the GNAT pragma Unrestricted_Access
               on a protected operation, when use of 'Access would violate
               accessibility rules.

  Status:      This was fixed in 6.1 on 2007-01-06

  Workaround:  Place protected object at library level.

KP-601-F704-001 gnatchop cannot create filenames with unicode characters

  Problem:    On Windows a filename using an extended character set
              cannot be created properly by gnatchop. gnatchop will
              drop those chatacters into the final filename.

  Status:     This was fixed in 6.1 on 2007-03-11

  Workaround  Rename the file manually

KP-601-F627-010 Missing constraint check on 'Access

  Problem:     An assignment of an attribute reference X'Access to an object
               whose type is a subtype S of an access to array type A fails
               to raise Constraint_Error when bounds of X are not compatible
               with those of S.

  Status:      This was fixed in 6.1 on 2007-01-05

  Workaround:  Do no write such illegal assignments, and whenever possible
               avoid subtypes of access types.

KP-601-F613-003 Two package specs in same file causes compile failure

  Problem:    If a single file contains two separate package specs, and the
              multiple-unit-per-file feature is used to compile the resulting
              packages (e.g. with a gnat.adc built with gnatname), then the
              compilation or link fails with a duplicate entity name.

  Status:     This was fixed in 6.1 on 2007-01-02

  Workaround: Put the package specs in separate files.

KP-601-F330-015 ZCX not supported with shared runtime and tasking

  Problem:    A program linked against the GNAT shared runtime and
              having tasks raising exceptions may crash. This is
              because the exception tables are not thread safe.

  Status:     This was fixed in 6.0 on 2006-10-20

  Workaround: Use the GNAT static runtime or build the application
              with the setjump/longjump (--RTS=sjlj) exception model.

KP-602-EC06-009 Very long source lines incorrectly handled

  Problem:     If a source line has more than 32766 characters after tabs have
               been expanded (using normal 1,9,17,.. spacing), then the
               compiler behaves in various strange ways, possibly printing
               rubbish column numbers, or terminating with an exception.

   Status:     This was fixed in 6.1 on 2007-01-03

   Workaround: Avoid such long lines, split them up into shorter lines.

KP-601-E906-012 Setting priority within a rendezvous is ignored

  Problem:    When calling Ada.Dynamic_Priorities.Set_Priority inside
              an accept statement, the priority will be modified only during
              the rendezvous, and reset afterwards.

  Status:     This was fixed in 6.1 on 2007-03-29

  Workaround: Set the priority either before or after the accept statement.

KP-601-DB02-022 Failure to diagnose Export for an enumeration literal

  Problem:    GNAT does not permit enumeration literals to be exported, but
              an attempt to do so was not diagnosed, and resulted in a link
              error for the missing external symbol.

  Status:     This was fixed in 6.1 on 2006-12-27

  Workaround: A proper diagnostic is now issued, so avoid the attempt to export
              enumeration literals, since this is not supported. An alternative
              is to define an integer object initialized to the enumeration pos
              value and export that instead.

KP-601-D402-005 Infinite loop binding source file with name with special chars

  Problem:    If a source file name has special characters such as parens, and
              an appropriate Source_File_Name pragma (or equivalent project
              file naming package) specifies this file name, then the source
              file compiles fine, but the binder goes into an infinite loop.

  Status:     This was fixed in 6.1 on 2007-01-01

  Workaround: Avoid the use of source file names containing special characters.

