==============================================================
Known problems in GNAT version 3.14a1 as of March 05th, 2002
==============================================================

Copyright (c) 2001-2002, Ada Core Technologies

The following is a listing of known problems in release 3.14a1. Except where
specifically noted, all these problems have been corrected in version 3.15,
which means they are corrected in any wavefront issued subsequent to the
date above, and in the final 3.15 releases.

KP-314a1-B906-001 m68k tasking issues

  Problem:    It was possible to execute incorrect prefetched instructions due
              to a problem with the management of the instruction cache. The
              instruction cache was not flushed when setting up trampolines.

  Status:     This problem is fixed in 3.15a1.

  Workaround: Use a VxWorks kernel for m68k compiled disabling the instruction
              cache.

KP-314a1-9825-009 Cross-reference fails in Glide

  Problem:    Cross references sometimes fail in Glide for entities referenced
              multiple times in the source file.

  Status:     This problem is fixed in 3.15.

  Workaround: Select the menu Ada->Goto->List References, and click on the line
              that mentions the spec or the body.

KP-314a1-9724-008 ASIS problem with pragma Debug

  Problem:    ASIS can not correctly decompose the GNAT-specific Debug pragma
              and compute its span and text image

  Status:     This problem is fixed in 3.15.

  Workaround: Skip processing of An_Implementation_Defined_Pragma Elements

KP-314a1-9723-018 Corresponding_Name_Definition issue with Source_File_Name

  Problem:    Corresponding_Name_Definition blows up when applied to the names
              being arguments of pragma Source_File_Name (The right behavior
              is raising ASIS_Inappropriate_Element)

  Status:     This problem is fixed in 3.15.

  Workaround: Do not apply Corresponding_Name_Definition in this case

KP-314a1-9723-004 Corresponding_Name_Definition issue with explicit dereference

  Problem:    Corresponding_Name_Definition blows up when applied to the
              prefix of explicit dereference

  Status:     This problem is fixed in 3.15.

  Workaround: Use manual traversing of the syntax structure

KP-314a1-9722-018 Asis problem with GNAT-specific attributes-functions

  Problem:    For GNAT-specific attributes which are functions (in particular,
              Asm_Input and Asm_Output) ASIS structural queries does not
              provide the correct structural decomposition (attributes are not
              treated as functions)

  Status:     This problem is fixed in 3.15.

  Workaround: In case of AnAn_Implementation_Defined_Attribute, get the image
              of attribute designator and then process potentially dangerous
              cases manually

KP-314a1-9721-003 Asis.Expressions.Corresponding_Name_Definition problem

  Problem:    Corresponding_Name_Definition blows up when the argument
              identifier is defined in library-level instantiation and
              when the template has a body.

  Status:     This problem is fixed in 3.15.

  Workaround: Use manual syntax traversing to get the name definition

KP-314a1-9718-004 ASIS returns duplicated type declarations

  Problem:    In case if the type is derived from a private type with no
              constraint, ASIS returns the declaration of the derived
              type duplicated in the declaration list (this happens
              if the parent type is declared in the parent package, and the
              derived type - in its child package)

  Status:     This problem is fixed in 3.15.

  Workaround: When needed, apply Is_Equal to the components of Element lists
              detect duplicated elements

KP-314a1-9716-011 Gprof on Windows platform could return wrong values

  Problem:    Gprof on Windows platform could return wrong values. This is
              due to a problem in the gprof runtime. This bug will be more
              frequent with medium or large applications.

  Status:     This problem is fixed in 3.15.

  Workaround: Isolate algorithms to be profiled in a small program.

KP-314a1-9709-012 Incompatbility of libgnat.so across Linux versions

  Problem:    Since libgnat.so is linked with the system bfd library, any
              incompatible version change of this library causes difficulties
              in using the shared libgnat.

  Status:     This problem is fixed in 3.15 (the dependency on libbfd has been
              removed).

  Workaround: Use the version of libbfd expected by libgnat.so instead of the
              default version.

KP-314a1-9707-001 Incorrect unreferenced warnings from subunits

  Problem:    If a subunit is compiled on its own with the -gnatwu (warn
              on unreferenced entities) switch, then false warnings may be
              generated for the parent unit, since references beyond the
              location of the stub are ignored.

  Status:     This problem is fixed in 3.15.

  Workaround: Simply ignore any warnings for other than the subunit itself
              when compiling a subunit, or avoid the use of the -gnatwu
              switch when compiling a subunit on its own.

KP-314a1-9701-002 Spurious visibility errors with nested instances

  Problem:    Compiler reports spurious visiblity errors when a single package
              contains several instantiations of a child unit C1 that itself
              contains an inner instance of one of its siblings C2. The errors,
              if any, are reported on references to entities declared in the
              private part of C1.

  Status:     This problem is fixed in 3.15.

  Workaround: Place different instantiations of C1 in different packages.

KP-314a1-9701-001 Incorrect optimization of comparisons that raise CE

  Problem:    If a comparison is against the end of the range of the base
              type (e.g. a comparison of a Short_Short_Integer value with
              127, the maximum value of this type), the compiler incorrectly
              assumes that the result cannot be greater than the limit, and
              eliminates the check. But this misses the (uncommon) case where
              the evaluation of the left side is an operator that raises a
              Constraint_Error exception.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid integer comparison operations whose operands can raise
              Constraint_Error. If necessary, evaluate such operands into
              a local temporary before the comparison.

KP-314a1-9627-003 Incorrect references for overloaded subprograms

  Problem:    The ali files (and tools driven from them, including GLIDE,
              gnatfind, gnatxref) incorrectly contain extra references to
              the last homonym of a set of overloaded entities.

  Status:     This problem is fixed in 3.15.

  Workaround: Ignore the extra incorrect references.

KP-314a1-9620-003 Wrong results of the Asis.Text queries for slices

  Problem:    In case if the prefix of a slice is a selected component or an
              expanded name, Asis.Text queries Element_Span and Element_Image
              return wrong results (spans and image start from the dot in the
              prefix)

  Status:     This problem is fixed in 3.15.

  Workaround: Decompose the slice into components and get spans and images of
              these components

KP-314a1-9619-001 GDB has trouble with variant record with rep clause

  Problem:    In some cases, when a record has a variant part and also a
              representation clause, GDB fails to print the variant part,
              and also miscalculates the 'Size attribute.

  Status:     This problem is fixed in 3.15.

  Workaround: Either write a subprogram to display the fields of the record
              and call it from GDB or use GDB memory dump commands (x/x)
              extract the needed fields manually.

KP-314a1-9607-005 Rare problem with similar aggregates

  Problem:    In extremely rare cases, if the part of two subprograms
              prior to an aggregate assignment of an unconstrained record type
              is identical except for the base type of the aggregate and
              the values and sizes of all the items in the aggregates are the
              same in both subprograms, the memory image of the first aggregate
              will be used for both.  This can result in either a SIGBUS, if
              this causes a misaligned access or the data may be put into
              the wrong position in the record.

  Status:     This problem is fixed in 3.15.

  Workaround: Change one of the subprograms at a point before the aggregate
              to make it no longer identical, perhaps by reordering
              code or by adding a declaration of a dummy variable or type.

KP-314a1-9607-003 Gnatmake odd behavior for source replacement

  Problem:    If a package instantiation is replaced by a standard package
              with separate body and spec, and the old ali file from the
              instantiation is still around, gnatmake gets confused, and
              after recompiling the new package, complains that it still
              needs recompiling.

  Status:     This problem is fixed in 3.15.

  Workaround: Remove the obsolete ali file, or simply repeat the gnatmake
              command (since gnatmake will have removed the file itself the
              first time it was run).

KP-314a1-9606-004 Compiler crash on inlining function that returns Null

  Problem:    Compiler crashes when front-end inlining is enabled, and the
              the body of the function being inlining has a single return
              statement whose expression is Null.

  Status:     This problem is fixed in 3.15.

  Workaround: Return a local variable whose value is Null, or do not inline
              the function.

KP-314a1-9606-003 Missing parentheses in -gnatG output

  Problem:    The -gnatG output may miss parentheses for some complex
              generated code sequences.

  Status:     This problem is fixed in 3.15.

  Workaround: If necessary, consult the -gnatdt tree output to determine
              the exact structure of complex expressions.

KP-314a1-9605-010 Lock_File does not handle directory separator properly.

  Problem:    Lock_File (version without the Directory parameter) do not work
              as the directory separator was not handled properly.

  Status:     This problem is fixed in 3.15.

  Workaround: Use Lock_File version where the directory and file name are
              specified separately.

KP-314a1-9604-015 Can't change non-relocatable DLL base address

  Problem:    GNATDLL was not correctly setting the non-relocatble DLL base
              address. GNATDLL option -a had no effect.

  Status:     This problem is fixed in 3.15.

  Workaround: Use GNATDLL -v option to get the list of commands to build the
              DLL. Then add -Wl,--image-base=0x<addr> to the last link
              command.

KP-314a1-9601-002 Compiler fails to recognize private overloading

  Problem:    Compiler rejects a call to an inherited abstract operation that
              has been overridden in the private part of the package, and the
              call is from within a different package.

  Status:     This problem is fixed in 3.15.

  Workaround: Override inherited operation in the visible part.

KP-314a1-9530-007 Missing finalization for complex controlled entry formals

  Problem:    Some finalizations related to assignment statements were
              missing when the target was an array element containing
              controlled components which happened to be an out entry
              parameter. The most visible effect of this problem was a
              memory leak involving unbounded strings.

  Status:     This problem is fixed in 3.15.

  Workaround: Force the array element to be directly controlled as
              well as having controlled components.

KP-314a1-9528-020 Compiler crashes on protected type with task subcomponent

  Problem:    Compiler crashes when compiling a protected type declaration when
              one of the private components is a composite that contains tasks.

  Status:     This problem is fixed in 3.15.

  Workaround: Make the task into a component of the protected type, rather
              than a subcomponent (protected types should not contain tasks
              in any case).

KP-314a1-9522-010 Wide characters in identifiers mishandled

  Problem:    If an identifier contains a wide character code whose value
              corresponds to a normal Latin-1 character, then it is not
              considered to be equivalent to the corresponding Latin-1
              character.

  Status:     This problem is fixed in 3.15.

  Workaround: Write the Latin-1 character directly in the identifier,
              instead of using wide character notation.

KP-314a1-9522-008 Spurious error on nested instantiation with inlining

  Problem:    If the operands of an assignment statement are subprogram
              parameters of an unconstrained bit packed array type, then
              in some cases the length of the assignment is miscalculated,
              causing storage to be over-written.

  Status:     This problem is fixed in 3.15.

  Workaround: Replace the offending assignment statement with a loop that
              does element by element copying of the array contents.

KP-314a1-9522-007 Bad code for unconstrained bit packed array assignment

  Problem:    Compiler complains about the missing body of a library-level
              instance, when compiling a unit that depends on the instance,
              some subprograms in the generic are inlined, and front-end
              inlining is enabled.

  Status:     This problem is fixed in 3.15.

  Workaround: Place the instance within another package, or compile the unit
              without front-end inlining.

KP-314a1-9521-014 Compiler fails to detect illegal view conversion

  Problem:    Compiler does not reject a view conversion between array types
              whose components do not have the same aliased status.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not write illegal code.

KP-314a1-9521-011 Compiler fails to enforce rule on access subtypes

  Problem:    Compiler fails to enforce the rule forbidding subtypes of
              general access types whose designated type has some
              unconstrained partial view.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid this illegal construction

KP-314a1-9521-007 Incorrect code generated for controlled primitive body

  Problem:    Compiler generates incorrect code for a subprogram body without
              previous spec that is a primitive operation, if the operation
              is a controlled action.

  Status:     This problem is fixed in 3.15.

  Workaround: Provide a subprogram declaration for the operation.

KP-314a1-9521-005 Compiler crashes on unreachable code

  Problem:    Compiler aborts if an instantiation appears within a subprogram
              body that is within a statically unreachable statement sequence.

  Status:     This problem is fixed in 3.15.

  Workaround: Remove unreachable code, or place instantiation elsewhere.

KP-314a1-9521-002 Compiler crash on type with private controlled components

  Problem:    Compiler crashes on an allocator for a type with private
              controlled components, if an expression of the access type
              appears before the record type is frozen.

  Status:     This problem is fixed in 3.15.

  Workaround: Make controlld components non-private, or reorder declarations.

KP-314a1-9521-001 Spurious warnings on unreachable code

  Problem:    Compiler warns of run-time constraint error on code that is
              statically unreachable, involving renamed operators.

  Status:     This problem is fixed in 3.15.

  Workaround: Ignore warnings, or use pragma Warnings (Off).

KP-314a1-9520-001 Wrong code for variable-position bitfield

  Problem:    If there is a field in a record whose bit position is not
              a constant but also not a function of a discriminant (e.g.,
              the size of a previous field depends on some variable) and
              the position of the field is not at a byte boundary, the
              compiler will treat it as if it were on a byte boundary.
              Such a field can only occur in a record to which Pragma
              Pack has been applied.

  Status:     This problem is fixed in 3.15.

  Workaround: Reorder the fields in the record so that the field(s) of
              variable size are last. (This also produces much more
              efficient code.)

KP-314a1-9518-003 Pragma Linker_Options with spaces on Windows

  Problem:    On Windows a space in a Linker_Options pragma was handled
              as a separator. GNAT was not following its documentation
              (see GNAT RM 4.77).

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid spaces in Linker_Options pragma if possible or use GNAT
              specific Link_With pragma.

KP-314a1-9518-002 No_Implementation_Restrictions does not work

  Problem:    The restrictions identifier No_Implementation_Restrictions
              failed to give errors as required for the use of implementation
              dependent pragmas.

  Status:     This problem is fixed in 3.15.

  Workaround: Manually ensure that no GNAT restriction identifiers are used.

KP-314a1-9518-001 Misclassification of pragmas (Ada 83 and GNAT)

  Problem:    A number of pragmas were misclassified as non-Ada 83 or
              GNAT pragmas, resulting in incorrect warnings with the
              -gnat83 flag, or incorrect errors using pragma Restrictions
              (No_Implementation_Pragmas).

  Status:     This problem is fixed in 3.15.

  Workaround: Ignore the warnings, or temporarily remove the restrictions
              pragma or -gnat83 flag for the affected unit.

KP-314a1-9509-012 Problem displaying values of packed dynamic fields in GDB

  Problem:    If a record is both packed and has fields of variable size,
              GDB will, in some cases, display the incorrect value for
              fields that occupy fewer bits than their type.

  Status:     This problem is fixed in 3.15.

  Workaround: Either write a subprogram to display the fields of the record
              and call it from GDB or use GDB memory dump commands and
              extract the needed field manually.

KP-314a1-9509-004 Misleading output from -gnatR switch for dynamic fields

  Problem:    If a field has a dynamic position, then the indication of the
              bit position in the -gnatR output can be incorrect.

  Status:     This problem is fixed in 3.15.

  Workaround: Simply ignore the bit positions in this case, they should be
              listed as ? .. ?? in this case, since they are in general not
              statically known.

KP-314a1-9507-007 Compiler crash on generic grand-child unit with private decl.

  Problem:    Compiler aborts when compiling a generic unit whose parent is a
              child unit, when the generic unit contains a private type whose
              completion is a derivation of a private formal.

  Status:     This problem is fixed in 3.15.

  Workaround: Make the derived type non-private.

KP-314a1-9507-002 Compiler crash for bad case statement on [Wide_]Character

  Problem:    If the expression for a case statement has a root type of either
              Character, or Wide_Character, and there are missing case values,
              then the compiler may crash trying to print diagnostic messages.

  Status:     This problem is fixed in 3.15.

  Workaround: Supply the missing case values or others clause to eliminate
              the error message.

KP-314a1-9506-013 Compiler fails to compile generic child with formal extension

  Problem:    Compiler emits spurious error when compiling an instance of a
              generic child unit, when one of its formals is an extension of
              a formal of the generic parent, and the actual is declared in an
              instance of the parent.

  Status:     This problem is fixed in 3.15.

  Workaround: Make the child unit into a nested package within the parent.

KP-314a1-9502-008 Compiler crash on primitive operation used in nested instance

  Problem:    Compiler crashes with a gigi abort (320) on a package declaration
              that contains a tagged type, a primitive operation O of the type,
              and an instantiation Inst1 nested within an instantiation Inst2,
              where Inst2 has no body, and code in the body of Inst1 calls O.

  Status:     This problem is fixed in 3.15.

  Workaround: Move Inst2 (and the enclosed Inst1) to the package body.

KP-314a1-9430-004 Compiler crash on nested instance of renamed subprogram.

  Problem:    Compiler crashes when a generic contains an instance of a
              renamed generic subprogram declared in a different unit.

  Status:     This problem is fixed in 3.15.

  Workaround: Use the original name in the nested instance, rather than that
              of the renaming.

KP-314a1-9424-013 Compiler crash with related controlled types.

  Problem:    Compiler crashes on an allocator for an access type AT2,
              when its designated type T2 is derived from some controlled
              type T1, and the type of a component of T1 is AT2

  Status:     This problem is fixed in 3.15.

  Workaround: Derive T1 and T2 from some common abstract type, or make T1
              into a discriminated type and T2 into a subtype of it.

KP-314a1-9423-016 Incorrect handling of alignment clause for packed array

  Problem:    An alignment clause for a packed array type is not taken into
              account when generating code for a packed array, and for the
              case of machines which require strict alignment, this can
              result in a crash if an address clause is specified which
              satisfies the value given in the alignment clause.

  Status:     This problem is fixed in 3.15.

  Workaround: Make sure that the address specified is a multiple of the
              default alignment, or copy the packed array before accessing
              elements of the array.

KP-314a1-9418-005 Failure to detect multiply overflow of 64-bit integers

  Problem:    When two 64-bit signed integers are multiplied with overflow
              checking enabled, there are some cases (those where the result
              overflows, but both operands have absolute values less than
              2**32), where Constraint_Error is not raised, and instead an
              incorrect result is produced.

  Status:     This problem is fixed in 3.15. A patch is available for 3.14.

  Workaround: If overflow detection is critical, then program overflow
              detection explicitly, before the multiply.

KP-314a1-9415-009 Problem with access discriminant of constrained extension

  Problem:    Compiler reports a spurious type error on an access discriminant
              for a component of a type extension that constrains its parent's
              discriminants.

  Status:     This problem is fixed in 3.15.

  Workaround: Define an unconstrained extension, and a separate subtype.

KP-314a1-9415-007 Bad code with large aggregate constant in loop

  Problem:    If a constant is declared within a loop, and the constant is
              initialized with a large aggregate whose value changes from
              one iteration of the loop to the next, then the compiler may
              incorrectly move accesses to small components of this constant
              out of the loop, resulting in a wrong value.

  Status:     This problem is fixed in 3.15.

  Workaround: Remove the "constant" keyword from the declaration.

KP-314a1-9408-018 Warnings not suppressed with -gnatD -gnatwu

  Problem:    If both of the options -gnatD and -gnatwu are present (debug
              generated code and warn on unused entities), then warnings may
              be generated even if pragma Warnings (Off) should suppress them.
              Notably this shows up as a bogus warning for the predefined unit
              System.Standard_Library (s-stalib.ads).

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use -gnatwu if you are using -gnatD, or simply ignore
              the extra (harmless) warnings.

KP-314a1-9405-007 Problem restarting threads in GDB on Solaris

  Problem:    On multithread programs with signal handlers, if GDB
              intercepts a signal to print it, but not to stop
              (as with 'handle SIGNAL nostop print pass'), the program
              will hang due to threads that are not properly restarted.

  Status:     This problem is fixed in 3.15.

  Workaround: Signals for which GDB is directed to stop, or for which
              'nostop noprint pass' is specified will work, so avoid
              using 'handle SIGNAL nostop print ...'.

KP-314a1-9404-004 GDB sets breakpoint in wrong function

  Problem:    GDB can incorrectly set a breakpoint in a generic instantiation
              instead of in a non-generic subprogram from the same unit. This
              is caused by the fact that all symbols related to the
              instantiation are associated with the unit that does the
              instantiation, rather than the unit containing the generic, and
              GDB's normal delayed-symbol-reading mechanism can be led to
              believe hmistakenly that all the symbol tables for the unit
              containing the generic definition have been read in.

  Status:     This problem is fixed in 3.15.

  Workaround: Use the -readnow option on the command line or on a file
              command to read full symbols.

KP-314a1-9404-002 GDB on HPUX crashes on backtrace

  Problem:    Certain backtraces in which some subprograms in the frame
              chain are in shared libraries cause GDB to crash.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid backtraces through shared-library routines.

KP-314a1-9327-018 Compiler crash on fixed * non-static universal expression.

  Problem:    Compiler aborts on a fixed point multiplication where one of
              the operands is an exponentiation of a real literal with a
              non-static exponent.

  Status:     This problem is fixed in 3.15.

  Workaround  Introduce an explicit conversion for the exponentiation, or
              used a typed constant instead of a real literal.

KP-314a1-9327-013 Cross-references in Glide with special naming schemes

  Problem:    When using non-standard naming scheme for Ada sources, Glide
              will try to compile the spec files instead of the body files,
              thus generating extra files even though the cross-references
              work correctly.

  Status:     This problem is fixed in 3.15.

  Workaround: Select the checkbox Ada->Options->Confirm Commands, and change
              the name of the file that Glide is trying to compile.

KP-314a1-9324-008 GDB crashes when trying to print unchecked union

  Problem:    GDB crashes when attempting to print a value of a record
              type annotated with pragma Unchecked_Union.

  Status:     This problem is fixed in 3.15.

  Workaround: Perform a 'set lang c' before attempting to print the
              quantity (and 'set lang auto' to reset).

KP-314a1-9317-071 Ada.Strings.Fixed.Delete causes incorrect exception

  Problem:    If From > Through in a call to Ada.Strings.Fixed.Delete
              then Index_Error was raised if From or Through was out of
              range, but the Source string should be returned unchanged
              in this case.

  Status:     This problem is fixed in 3.15.

  Workaround: Test for From > Through and avoid the call to Delete which
              has no effect in this case anyway.

KP-314a1-9314-076 Unable to set breakpoints using powerpc-wrs-vxworks-gdb

  Problem:    When debugging a VxWorks program on NT, GDB is sometimes
              unable to execute the "break foo.adb:15" command, issuing
              the following error message: "No source file named foo.adb.".
              This problem can happen when this source files has been
              compiled from a directory that is different from the
              directory where it is located.

  Status:     This problem is fixed in 3.15.

  Workaround: Use breakpoints on functions instead.

KP-314a1-9305-038 Cannot process sources with unknown pragmas in gnatelim

  Problem:    Gnatelim crashes on unknown pragmas that contain constructs
              that look like function calls.

  Status:     This problem is fixed in 3.15.

  Workaround: Remove or comment out the lines with unknown pragmas.

KP-314a1-9305-018 GDB gets wrong size for integral subtype

  Problem:    When a subtype of Integer has a range that coincides with
              that of signed or unsigned 1-byte or 2-byte integers, GDB
              incorrectly ascribe to it a size of 1 or 2 bytes, respectively,
              even if the representation used 4 bytes.

  Status:     This problem is fixed in 3.15.

  Workaround: One can still examine the raw values of the array with, for
              example,
                  x/d anArray(1)'address

KP-314a1-9303-014 Component_Alignment pragma not always correctly handled

  Problem:    The Component_Alignment pragma was ignored in some cases. It
              is now fully implemented. The effect is to pack to the byte
              level, rather than the bit level, as documented.

  Status:     This problem is fixed in 3.15.

  Workaround: Provide a record representation clause specifying the
              required layout of the record.

KP-314a1-9228-008 Incorrect handling of elab-time allocs in gnatmem GMEM mode

  Problem:    Gnatmem is unable to track any elaboration-time user
              allocations; allocations in tasks started at elaboration
              time can be tracked partially or not at all.

  Status:     This problem is fixed in 3.15.

  Workaround: Open the bindfile in the text editor and remove the lines
                 Elab_Final_Code := 1;
              present there in between binding and linking.

KP-314a1-9228-003 GNAT.Expect.Non_Blocking_Spawn does not work under AiX

  Problem:    Creating a process with GNAT.Expect under AiX will always
              raise Invalid_Process.

  Status:     This problem is fixed in 3.15.

  Workaround: Use GNAT.OS_Lib instead for this functionality.

KP-314a1-9227-007 Suppressing Elaboration_Check does not work fully.

  Problem:    A pragma Suppress (Elaboration_Check) without a second argument
              does not remove elaboration checks on calls in the enclosing
              declarative part.

  Status:     This problem is fixed in 3.15

  Workaround: Add the name of the called entity as a second pragma.argument.

KP-314a1-9222-006 Missing dots in left handbar of the source editor of GVD

  Problem:    When debugging a VxWorks application from NT, GVD sometimes
              does not display the blue dots next to lines for which the
              compiler has generated some code and the associated debug
              information.

  Status:     This problem is fixed in 3.15

  Workaround: Use the gdb command "info line <filename>:<line number>"
              directly in the GVD console to know whether the compiler
              has generated some code for a given line.

KP-314a1-9222-004 Relative delays too short under VxWorks

  Problem:    Under VxWorks, relative delays can last a little bit less
              than the actual requested time, due to the fact that the
              first clock tick as signaled by the kernel may not represent
              a complete cycle.

  Status:     This problem is fixed in 3.15.

  Workaround: Use absolute delays instead, or add a small (value of a clock
              tick) amount to the relative delay.

KP-314a1-9216-007 Spurious error with stack checking.

  Problem:    Compiler emits a spurious semantic error when a function call
              returning a tagged type appears as a non-controlling argument
              in an enclosing call, and the unit is compiled with stack-check.

  Status:     This problem is fixed in 3.15.

  Workaround: Compile unit without stack-check.

KP-314a1-9217-006 Compiler abort on pragma Inspection_Point in a protected op.

  Problem:    The compiler crashes on a pragma Inspection_Point that appears
              within a protected operation, whose argument is a private
              component of the protected object.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use the pragma in this context (it has no effect in
              this case, so the pragma is not needed).

KP-314a1-9215-002 GDB for VxWorks does not source .vxgdbinit file at startup

  Problem:    At startup, the VxWorks cross debugger incorrectly executes
              the commands inside .gdbinit instead of inside .vxgdbinit,
              as described by the documentation.

  Status:     This problem is fixed in 3.15.

  Workaround: Rename the .vxgdbinit file into .gdbinit or use the --command
              switch.

KP-314a1-9213-015 Link failure in -O mode with zero cost exceptions

  Problem:    If a type containing tasks or controlled types is declared
              within a subprogram, then when zero cost exceptions are
              used (e.g. on DEC Unix or IRIX), and optimziation is on,
              the link may fail due to missing symbols for initialization
              procedures related to the type.

  Status:     This problem is fixed in 3.15.

  Workaround: Declare the type at the library level, or compile with no
              optimization, or compile the program in -gnatL mode.

KP-314a1-9210-001 GNAT.Sockets example not working on NT.

  Problem:    The example in GNAT.Sockets is not working on Windows since the
              Sockets layer is finalized before the end of the tasks Ping
              and Pong.

  Status:     This problem is fixed in 3.15.

  Workaround: Add two rendez-vous with tasks Ping and Pong just before calling
              Finalize in the main program. These rendez-vous must be accepted
              by tasks Ping and Pong just before exiting. Another simple fix
              is to just remove the Finalize call. This is just an error in
              the example, not a bug in GNAT.Sockets.

KP-314a1-9208-001 Out parameters not initialized in Normalize_Scalars mode

  Problem:    In Normalize_Scalars mode, scalar parameters of mode OUT should
              be initialized, since they are otherwise uninitialized.

  Status:     This problem is fixed in 3.15.

  Workaround: Provide explicit initializations for out parameters if it is
              essential to avoid any possibility of uninitialized scalar
              objects being accessed.

KP-314a1-9207-002 Spurious dependence on package body with local instance

  Problem:    If an instance appears within a libary package P, and there are
              calls to an inlined subprogram declared in the instance, the
              compiler will establish a semantic dependency on the body of P.
              This will lead to a spurious error if the body is not available.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not compile the client unit with inlining.

KP-314a1-9207-018 Spurious visibility error on renaming mixed mode operation

  Problem:    A subprogram renaming whose renamed entity is a mixed mode
              operation of the form integer * fixed is rejected if the
              fixed_point type is given by an expanded name and is not
              use-visible or immediately visible.

  Status:     This problem is fixed in 3.15.

  Workaround: Add a use_type clause for the fixed_point type.

KP-314a1-9202-006 Florist, problem with one of the process primitives

  Problem:    Make_Path_Name was not always adding a trailing NUL to
              the resulting file name leading to a potentially
              incorrect interpretation of the name.

  Status:     This problem is fixed in 3.15.

  Workaround: Make sure that the File parameter of all calls to
              Make_Path_Name have a trailing 'NUL'.

KP-314a1-9131-008 Unable to print slice of array

  Problem:    Trying to print a slice of an array under gdb sometimes
              fails with the error message "cannot take slice of non-array".
              The same error can also happen with access to array variables.

  Status:     This problem is fixed in 3.15.

  Workaround: Manually dereference the variable if it is an access to array,
              or print each element of the slice individually instead of
              printing the slice.

KP-314a1-9130-012 Unable to print a variable declared in a declare block

  Problem:    Gdb sometimes fails to print the value of a variable declared
              inside a declare block, printing the following error message:
              "No frame is currently executing in specified block".

  Status:     This problem is fixed in 3.15.

  Workaround: Change the language to C temporarily using "set lang c" to
              print the value of the variable.

KP-314a1-9127-009 Problem accessing packed array with multiplication in index

  Problem:    If a packed array is accessed with an index expression that
              contains a mulitplication by a constant and the constant
              is a multiple of the number of array elements per byte,
              and checks are suppressed, then wrong code may be generated
              for the access.

  Status:     This problem is fixed in 3.15.

  Workaround: Compute the index expression into a temporary variable.

KP-314a1-9130-008 Divide by zero in compiler with comparison of references

  Problem:    If a comparison is made between two records which are themselves
              components of outer records, there are some cases where the
              compiler will get a divide-by-zero exception.

  Status:     This problem is fixed in 3.15.

  Workaround: Copy the records into temporary variables and compare them.

KP-314a1-9126-019 Problem debugging renamed entities with gdb

  Problem:    Gdb fails to print the value of renames variables.

  Status:     This problem is fixed in 3.15.

  Workaround: Print the value that the variable renames instead of printing
              the value of the renames variable.

KP-314a1-9125-007 GDB on HPUX 11 causes inferior to segfault

  Problem:    Programs that use shl_load, shl_unload, etc. on HPUX fail
              with segmentation errors when run under GDB, if you link
              the file .../opt/langtools/lib/end.o into the executable.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid linking with end.o. You will not be able to track
              shared library events, but the debugged program will operate
              normally.

KP-314a1-9125-006 Spurious error with child unit in context of proper body

  Problem:    The compiler rejects a use of the full declaration of a private
              type, in the body of a package P that contains a previous stub
              whose context mentions a child unit of P.

  Status:     This problem is fixed in 3.15.

  Workaround: Move the stub to the end of the enclosing package body.

KP-314a1-9125-004 Incorrect values for Arccos(z) on the real axis

  Problem:    The complex Arccos routine returns a real value when the
              argument is real and outside the range -1.0 .. 1.0
              Ditto for complex Arcsin.

  Status:     This problem is fixed in 3.15.

  Workaround: For a real argument, use the equivalent formula:
                   -i * Log (X + Sqrt (X * X - 1.0))

KP-314a1-9123-014 Missing constraint check when arg is Unchecked_Conversion.

  Problem:    If the actual argument to a subprogram or function whose
              formal operand is a constrained type is an Unchecked_Conversion
              to an unconstrained (or less-constrained) subtype of the
              base type of the formal, the range check will be omitted.

  Status:     This problem is fixed in 3.15.

  Workaround: Use a temporary varable to store the result of the
              Unchecked_Conversion.

KP-314a1-9122-001 Normalize_Scalars does not initialize String/Wide_String

  Problem:    Variables of type Standard.String and Standard.Wide_String
              were not properly initialized by the Normalize_Scalars pragma.

  Status:     This problem is fixed in 3.15.

  Workaround: Initialize the variables explicitly, or use a type derived from
              one of these standard types.

KP-314a1-9119-009 Compiler fails to detect illegal use of abstract subtype

  Problem:    The compiler fails to reject an object declaration whose subtype
              indication is a subtype of a private abstract type.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use this illegal construct.

KP-314a1-9113-012 Temporary filename created in root directory under Windows

  Problem:    On Windows temporary files are created under the root
              directory instead of the current working directory (if TMP
              environment variable is not set and c:\temp directory does not
              exist) as documented.

  Status:     This problem is fixed in 3.15.

  Workaround: Set TMP environemnt variable if you do not want to have the
              temporary files created into the root directory.

KP-314a1-9112-010 Sockets error messages not handled under Windows

  Problem:    On Windows the socket error code is properly returned but
              the error message is not.

  Status:     This problem is fixed in 3.15.

  Workaround: Since the error code is correct, just check the right error
              message in any Winsock reference manual.

KP-314a1-9110-008 Miscompilation with condition var use with large stack

  Problem:    If a subprogram or function has a large stack frame (larger
              than can be addressed by a single instruction on the target
              machine) and the first static reference to variable that is
              used in a block that contains a block with an exception handler
              is in conditional context (e.g., within a "if" statement), if
              that reference is not the first one executed, the subsequent
              accesses will be mis-compiled and will cause a SIGSEGV.

  Status:     This problem is fixed in 3.15.

  Workaround: Add an earlier usage of the variable outside the conditional
              context, or avoid the use of stack checking for this unit.

KP-314a1-9110-006 Gigi 411 on some packed array types

  Problem:    On big-endian machine, if there is a packed array subtype
              that has a representation clause giving it a larger-than-default
              size or alignment, passing an instance of that type to a
              subprogram whose formal type is the base type of the subtype
              will cause a Gigi 411 abort.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid the construct above. Remove the pragma Pack, or give a
              size and alignment that correspond to the default values.

KP-314a1-9109-011 gnatdist crash on large storage_dir string

  Problem:    Using a large string as a storage_dir partition attribute
              can cause a gnatdist abort. It cannot successfully compile
              the main partition internal elaboration file.

  Status:     This problem is fixed in 3.15.

  Workaround: Use a shorter storage directory name.

KP-314a1-9026-006 Compiler crash on allocator for array of controlled objects

  Problem:    Compiler aborts when compiling an allocator for an array of
              objects with a controlled component, when the component type of
              the array is private at the point of the array type declaration.

  Status:     This problem is fixed in 3.15.

  Workaround: Make component type non-private, or place array declaration after
              completion of component type.

KP-314a1-9020-009 Compiler crash on Alpha with variant records

  Problem:    In some cases of variant record that have sizes specified
              on the Compaq Alpha system, the compiler will crash during
              some accesses to those record.

  Status:     This problem is fixed in 3.15.

  Workaround: Add an alignment clause specifing 4-byte alignment of the record.

KP-314a1-9019-004 Compiler crash in some cases of array comparisons

  Problem:    Compiler aborts in some cases of comparisons involving
              aliased or constant arrays.

  Status:     This problem is fixed in 3.15.

  Workaround: If one of the arrays is declared constant and initialized in
              the public part of a package, defer the initialization to the
              private part.

KP-314a1-9018-007 Unconstrained variables not diagnosed in Ada 83 mode

  Problem:    In Ada 83 mode, initialized unconstrained variables (e.g.
              of type string) were improperly accepted without an error
              message, but this construct is illegal in Ada 83.

  Status:     This problem is fixed in 3.15.

  Workaround: Ensure that the variable is constrained, or add a constant
              keyword to maintain Ada 83 compatibility.

KP-314a1-9014-006 Glide not working in character terminals

  Problem:    When Glide is started from an environment where the DISPLAY
              variable is not defined (Unix systems), it generates an
              error message

  Status:     This problem is fixed in 3.15.

  Workaround: Change the glide script and remove the --eval ... at the end
              in the call to emacs

KP-314a1-9013-001 Compiler crash with repped, discriminated, aligned record

  Problem:    If a discriminated record has record representation clauses
              for some fields and also has an alignment clause, the use of
              the record type as the type of a subprogram parameter may cause
              a compiler crash when some components of that parameter are
              accessed.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid the combination of conditions above.

KP-314a1-9012-007 Breakpoints interfering with the GDB begin command

  Problem:    Breakpoints which are set in a part of the code that is
              executed prior to the execution of the main program (for
              instance in the elaboration code) are interfering with
              the begin command, leading the debugger to stop at random
              locations.

  Status:     This problem is fixed in 3.15.

  Workaround: Place a breakpoint at the begining of the main program
              and use the run command instead.

KP-314a1-9011-005 Code generation error with small variant parameter

  Problem:    If the type of a parameter to a subprogram is a variant
              record which has a record rep clause and is 1, 2, 4, or 8
              byte long and one field is an access type to an unconstrained
              array which has been forced to be a "thin" pointer (the same
              size as one pointer) and the subprogram contains a call which
              passes a field of that access type to the subprogram, a previous
              reference to a different field of the parameter (e.g., the
              discriminant), the wrong value may be used.

  Status:     This problem is fixed in 3.15.

  Workaround: Make a copy of the access type and pass that to the subprogram.

KP-314a1-9007-013 Compiler crash for comparison of records with floats

  Problem:    Comparing two records with float components and one of them
              known to contain only 0.0 values may lead to compiler abortion
              when optimization is turned on.

  Status:     This problem is fixed in 3.15.

  Workaround: Compile the unit without optimization.

KP-314a1-9005-011 Spurious error with incomplete types in No_Run_Time.

  Problem:    Compiler emits a spurious error on a variable declaration
              whose type is an access type with an incomplete designated type.

  Status:     This problem is fixed in 3.15.

  Workaround: Move the object declaration after the completion of the
              designated type.

KP-314a1-9004-010 Slightly incorrect backtrace information.

  Problem:    The line numbers in bactrace information displayed by
              GNAT.Symbolic.Traceback are slightly off by a few line
              numbers. This problem is more frequent when the program
              is compiled with optimization.

  Status:     This problem is fixed in 3.15.

  Workaround: Use non-symbolic traceback (GNAT.Traceback), substract 8 to
              all the addresses returned, and then use addr2line to get
              the symbolic information.

KP-314a1-9004-006 Compiler fails to diagnose invisible operator.

  Problem:    Compiler does not diagnose illegal use of comparison operator
              written as a function call with a designator, when the left
              operand is universal and the right operand has a type that is
              not directly visible (related to 9004-002).

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use this illegal construct

KP-314a1-9004-002 Compiler fails to diagnose invisible operator.

  Problem:    Compiler does not diagnose illegal use of a comparison operator
              when the left operand is universal and the right operand has
              a type that is not directly visible.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use this illegal construct

KP-314a1-9001-007 Parenthesis incorrectly handled in GNAT.Regpat

  Problem:    Parenthesis pairs, which are returned in a Match_Array by the
              Match procedure sometimes provide incorrect results. This happens
              with complex regular expressions where GNAT.Regpat had to
              backtrack to match (for instance with non-greedy operators like
              *?, +?, or alternation '|')

  Status:     This problem is fixed in 3.15.

  Workaround: Try to replace the non-greedy operator by a standard one like
              '*' and '+'. These do not require backtracking

KP-314a1-9001-005 Operator '?' not working in GNAT.Regpat

  Problem:    A pattern like '.?a' is not handled properly by GNAT.Regpat, and
              will not match.

  Status:     This problem is fixed in 3.15.

  Workaround: Try to use either the '*' operator, or the '{0,1}' operator

KP-314a1-9001-003 Problem overriding size in derived type in separate package

  Problem:    If a record or array type in one package has an explicit size
              clause, then the compiler may or reject an attempt to derive
              a type in a different package with a different size.

  Status:     This problem is fixed in 3.15.

  Workaround: Do the deriviation in the same package, before the parent type
              is frozen, or introduce a common parent type with no size clause
              and derive the other types from it with appropriate size clauses.

KP-314a1-8930-003 Compiler crash on nested instantiation with local actual

  Problem:    Compiler aborts on the instantiation of a subprogram that
              contains a package P with a nested instantiation, if the actual
              for the inner instantiation is a subprogram local to P.

  Status:     This problem is fixed in 3.15.

  Workaround: Move the subprogram used as an actual outside of the package.

KP-314a1-8928-002 GDB can not print some array type descriptions

  Problem:    "info type" or "ptype Table" (where type Table is an array
              index by type Character) causes a Segmentation Fault in GDB.

  Status:     This problem is fixed in 3.15.

  Workaround: Temporary change the language to C by using "set lang c".

KP-314a1-8926-002 ASIS Name_Image problem with representation clauses

  Problem:    Asis.Expressions.Name_Image query blows up when applied to
              the attribute designator from the attribute definition clause.

  Status:     This problem is fixed in 3.15.

  Workaround: Use queries from Asis.Text to get the corresponding text image

KP-314a1-8923-011 Infinite loop in non-greedy operators in GNAT.Regpat

  Problem:    When using non-greedy operators (like .*?) followed by a constant
              string, it happens that match never finishes.

  Status:     This problem is fixed in 3.15.

  Workaround: Put word boundaries before the text following the operator, as
              in ".*?\btext"

KP-314a1-8922-009 Compiler crash on aggregate with constrained characters

  Problem:    Compiler aborts when compiling an aggregate for an array type
              whose component type is a non-static subtype of Character,
              all the aggregate components are character literals, and the
              index subtype is static.

  Status:     This problem is fixed in 3.15.

  Workaround: Make the component subtype static, or make one of the components
              non-static, e.g. by using a character variable with the right
              value.

KP-314a1-8921-003 Spurious error on operator symbol as subaggregate

  Problem:    Compiler generates a spurious error when a string that is an
              operator symbol is used as a one-dimensional subaggregate.

  Status:     This problem is fixed in 3.15.

  Workaround: Write the subaggregate explicitly, in terms of its character
              components.

KP-314a1-8914-004 Compiler crashes on renaming of protected operations

  Problem:    Compiler crashes when an overloaded protected operation is
              renamed outside of the protected object.

  Status:     This problem is fixed in 3.15.

  Workaround: Use different names for protected operations, or add dummy
              formals of different types to disambiguate.

KP-314a1-8913-002 ASIS problem with entry calls

  Problem:    ASIS queries returning statement lists blow up if the sequence
              of statements to return contains a call to an entry from an
              entry family. This also results in a gnatelim blow-up when
              processing the code containing such entry calls

  Status:     This problem is fixed in 3.15.

  Workaround: Obtain the latest version of gnatelim. This can be used to
              generate a set of eliminate pragmas which can then be used
              with an older version of the compiler.

KP-314a1-8910-022 The -m option does not work for gnatelim

  Problem:    gnatelim may blow up with "an entity has been registered twice"
              diagnosis when called with '-m' "check missed units" option.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use gnatelim with '-m' option (or use '-m' only to check
              if some units are missed and then get the list of Eliminate
              pragmas without '-m')

KP-314a1-8910-021 Compiler crash on expression of formal modular type

  Problem:    Compiler crashes on an expression with static operands, when
              the expected type is a formal modular type.

  Status:     This problem is fixed in 3.15

  Workaround: Use the literal value of the expression directly. Do not use
              negative values of the type in the generic unit.

KP-314a1-8910-018 Spurious error on aggregate default in renaming_as_body

  Problem:    Compiler incorrectly rejects a renaming_as_body for a function
              that has an array formal with an aggregate default with static
              components.

  Status:     This problem is fixed in 3.15

  Workaround: Declare a constant whose value is the aggregate, and use the
              constant in the signatures of the subprograms.

KP-314a1-8910-013 Spurious errors on call to function that renames a literal

  Problem:    Compiler fails to recognize that a call to a function renaming
              a literal is static, if the function is declared to return a
              subtype of the enumeration type.

  Status:     This problem is fixed in 3.15

  Workaround: Use the enumeration type itself as the return type.

KP-314a1-8907-009 Unable to restrict a breakpoint to a specific task

  Problem:    Task IDs specified in break commands are ignored by gdb 5.
              This causes gdb to stop in any task that hits the line
              where the breakpoint is set, instead of stopping just when
              inside the specified task.

  Status:     This problem is fixed in 3.15

  Workaround: Use conditional breakpoints to stop inside the right task.

KP-314a1-8904-011 Alignment for standard types not treated as static

  Problem:    The compiler rejects alignment attributes of standard types
              (e.g. character'alignment) in contexts requiring static
              expressions.

  Status:     This problem is fixed in 3.15

  Workaround: Apply the alignment attribute to a type derived from the
              standard type instead.

KP-314a1-8904-010 Blowup on encountering syntactic error in gnat.adc

  Problem:    If the first argument for a Source_File_Name pragma lacks
              the required identifier, then the compiler may blow up instead
              of giving a proper error message.

  Status:     This problem is fixed in 3.15

  Workaround: Make sure that a correct identifier is given for the first
              argument of all source file name pragmas.

KP-314a1-8904-007 Undetected ambiguity in prefix of 'Count

  Problem:    The compiler fails to diagnose an ambiguous prefix of the 'Count
              attribute, if one interpretation is a legal entry name, and the
              other is an outer procedure.

  Status:     This problem is fixed in 3.15

  Workaround: Qualify prefix with name of enclosing protected object.

KP-314a1-8903-009 Alignment failure on passing large object

  Problem:    If a field whose size is larger than a few words is misaligned
              in a record using a record representation clause and then
              passed to a subprorgram, a misaligned pointer may be passed
              to the subprogram, which will cause a trap on machines that
              require strict alignment. Note that this can only happen
              on a field whose size is known at compile-time since a record
              representation clause is not permitted on variable-size fields.

  Status:     This problem is fixed in 3.15.

  Workaround: Make a copy of the field and pass the copy.

KP-314a1-8902-016 Memory leaks in GNAT.OS_Lisb

  Problem:    The following subprograms in GNAT.Os_Lib cause memory leaks:
              Locate_Directory, Locate_Exec_On_Path, and Locate_Regular_File

  Status:     This problem is fixed in 3.15

  Workaround: Avoid any repeated use of these functions in long-lived programs,
              and instead import the underlying C functions directly.

KP-314a1-8826-013 Incomplete documentation for GNAT.Os_Lib.Spawn

  Problem:    The documentation says that the executable name must be a full
              path name, but on some systems, notably Unix systems, simple
              file names are also accepted if the executable can be located
              in the path.

  Status:     This problem is fixed in 3.15.

  Workaround: None needed, this is a documentation issue only.

KP-314a1-8826-012 Problem reformatting parameter lists in GLIDE

  Problem:    The command Ada->Edit->Format Parameter List doesn't work
              correctly when used on operators and the parameter list starts
              on a different line.

  Status:     This problem is fixed in 3.15.

  Workaround: Start the parameter list on the same line as the operator name.

KP-314a1-8825-012 Compiler crash with constant aggregate

  Problem:    If a package-level constant of a composite type is specifed as
              with an initializing expression that is an aggregate, and the
              variable is used in more than one parameter call list or
              use of unchecked conversion in more than one subprogram, the
              compiler may crash compiling the program.

  Status:     This problem is fixed in 3.15

  Workaround: Remove the "constant" keyword.

KP-314a1-8825-007 GNAT.Regexp.Match doesn't match documentation

  Problem:    Match returns True rather than raising Constraint_Error (which
              is the documented behavior) when the regular expression has not
              been initialized.

  Status:     This problem is fixed in 3.15.

  Workaround: Always compile the regular expression before calling Match.

KP-314a1-8825-004 Problem with gnatelim for inheritance inside subunits

  Problem:    If the Ada code being analyzed by gnatelim contains a derived
              type declared inside a local package which is part of a
              package subunit, then gnatelim may blow up (gnatelim is an
              ASIS tool and ASIS does not correctly process subprograms
              inherited by such type)

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use gnatelim for the programs containing such constructs,
              or rewrite the program to avoid such derived types.

KP-314a1-8825-001 Spurious error on subtype with controlled components

  Problem:    The compiler emits a spurious warning on an assignment whose
              expression is of a discriminated subtype, when the base type
              has controlled components if the subtype declaration appears
              before the base type is frozen.

  Status:     This problem is fixed in 3.15.

  Workaround: Introduce a dummy object declaration to freeze the base type
              before the subtype declaration.

KP-314a1-8824-014 Improper initialization of complext aggregates

  Problem:    The elaboration of an array aggregate whose components are
              allocators for complex records may share the designated
              objects rather than creating new ones for each component.

  Status:     This problem is fixed in 3.15.

  Workaround: Use a loop to build the object instead of an aggregate.

KP-314a1-8820-001 Incorrect size complaint for -gnatt from array declaration

  Problem:    If an array declaration has a bound that is known at compile
              time but not static (e.g. System.Address'Size), then if the
              unit is compiled with flags -gnatc and -gnatt, an incorrect
              error message complaining about the size may be generated.

  Status:     This problem is fixed in 3.15

  Workaround: Make the bound a static constant, or a variable.

KP-314a1-8817-009 Problem with child unit as main program in VxWorks

  Problem:    On VxWorks ports only, if the main program is a child unit,
              the binder attempts to use a dotted name (e.g. a.b) as the
              name of the main program, and builds a binder file that cannot
              be successfully compiled.

  Status:     This problem is fixed in 3.15

  Workaround: Use -M to override the incorrect default, and to set the
              desired main program name.

KP-314a1-8816-002 Crash using GNAT.AWK when file does not exist.

  Problem:    In GNAT.AWK Program_Error (EXCEPTION_ACCESS_VIOLATION) is raised
              when using the AWK library with a file that does not exist.

  Status:     This problem is fixed in 3.15

  Workaround: Handle Program_Error exception to avoid this problem instead of
              File_Error as documented. Note that File_Error must be handled
              for all other cases.

KP-314a1-8813-015 Compiler crash on illegal completion.

  Problem:    The compiler may crash when trying to build the initialization
              procedure of a type whose partial view has no discriminants, and
              whose full view is an indefinite subtype.

  Status:     This problem is fixed in 3.15.

  Workaround: Do not use this illegal construct.

KP-314a1-8813-012 Gigi 999 abort with record subtype of record with size clause

  Problem:    If a discriminated record has a size clause forcing it to a
              specific size and a record subtype is formed whose natural size
              is 8, 16, 32, or 64 bits, in some cases access to fields in that
              subtype will cause a Gigi abort 999.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid the above conditions or set the alignment of the record
              type to less than the size of the subtype in question.

KP-314a1-8813-009 Spurious visibility errors with inlining and nested instances

  Problem:    Entities may be improperly use-visible in a nested instance, when
              one of the generic bodies has inlined subprograms, and the nested
              instance is at the top level of a package body.

  Status:     This problem is fixed in 3.15.

  Workaound:  Remove Inline pragma, or use expanded names for the entities.

KP-314a1-8812-006 Minor inaccuracy in usage information for -gnatwa

  Problem:    The usage information for -gnatwa lists -gnatwh as not being
              turned on by this switch, but not -gnatwb.

  Status:     This problem is fixed in 3.15

  Workaround: This is a documentation problem only. To turn on biased
              rounding warnings, -gnatwb must be used.

KP-314a1-8811-012 Spurious visibility error with aggregate defaults in calls

  Problem:    The compiler generates spurious visibility errors after a call
              where a default expression is an array aggregate of unconstrained
              records that are not controlled.

  Status:     This problem is fixed in 3.15

  Workaround: Create a temporary for the aggregate, and use the temporary in
              the parameter specification for the subprogram.

KP-314a1-8809-005 Crash on inlining in parent of main unit

  Problem:    Compiler crashes if the spec of a parent unit of the main
              unit contains an instance of a package that contains inlined
              subprograms, and inlining is requested.

  Status:     This problem is fixed in 3.15

  Workaround: Compile offending unit without the -gnatn flag, or remove
              Inline pragma from generic package.

KP-314a1-8809-004 Improper visibility between context of sibling subunits

  Problem:    A subprogram that appears in the context of a subunit is
              improperly visible in a subsequent subunit of the same parent.

  Status:     This problem is fixed in 3.15

  Workaround: Do not make illegal use of improperly visible subprogram.

KP-314a1-8806-015 Incorrect handling of separate unit in gnathtml

  Problem:    When generating HTML files from a set of Ada units that include
              separates, the cross-references in the latter are incorrectly
              generated.

  Status:     This problem is fixed in 3.15

  Workaround: Compile each of the separate units manually with a gcc command,
              so as to generate an ALI file that contains the appropriate
              information for the cross-references.

KP-314a1-8806-014 Problem with terminal finalization

  Problem:    With some relatively convoluted data structures,
              finalization of the same object could happen twice (once
              from user code while finalizing another object and the
              default finalization) which could end up in a runtime
              crash or an infinite loop.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: If finalization is only used for memory management,
              pragma Finalize_Storage_Only can usually help working
              around the problem.

KP-314a1-8804-004 Incorrect exception raised

  Problem:    In some circumstances involving controlled types,
              dereferencing a null pointer raises Program_Error
              instead of Constraint_Error.

  Status:     This problem is fixed in 3.15

  Workaround: If Constraint_Error is needed, enclose the problematic
              construct in a block with an exception handler
              re-raising Constraint_Error.

KP-314a1-8803-003 GNAT.Traceback gives return addresses on PowerPC VxWorks

  Problem:    Under PowerPC VxWorks, the tracebacks returned by GNAT give
              the point of return instead of the calling point.

  Status:     This problem is fixed in 3.15

  Workaround: Subtract 4 from the addresses given by GNAT.

KP-314a1-8802-010 GNAT.OS_Lib.Spawn is sometimes non blocking under unix

  Problem:    When mixing Non_Blocking_Spawn and Spawn under unix systems,
              Spawn will sometimes return immediately instead of waiting.

  Status:     This problem is fixed in 3.15

  Workaround: Redefine Spawn using Non_Blocking_Spawn and waitpid explicitely.

KP-314a1-8728-003 Spurious constraint error in double dereference

  Problem:    The compiler fails to recognize that a subcomponent of an
              object denoted a component of an object which is itself
              denoted by an in-parameter of an access type, may be modifiable.
              A local variable of an unconstrained type initialized with
              such a subcomponent may appear to have the wrong bounds in
              a subsequent use.

  Status:     This problem is fixed in 3.15.

  Workaround: Declare the local variable with explicit constraints.

KP-314a1-8726-006 Bad result for Pred/Succ of 0.0 on Alpha and MIPS

  Problem:    On the alpha and mips (processors that do not support IEEE
              denormals, and for which Denorm is False), Pred or Succ
              applied to 0.0 gave an improper denormal value.

  Status:     This problem is fixed in 3.15

  Workaround: Replace the expression with the desired result.

KP-314a1-8723-011 Incorrect handling of redundant Pack pragma

  Problem:    If a pragma Pack is used on a small record for which a record
              representation clause is given that has holes in it, then the
              compiler may complain that the size is wrong.

  Status:     This problem is fixed in 3.15

  Workaround: Remove the pack pragma, it has no effect in any case if the
              record is layed out with a record representation clause.

KP-314a1-8723-005 Problem with code motion and exception regions

  Problem:    On machines with zero-cost exceptions (Alpha and MIPS) if a
              loop is inside a block with exception handlers and the loop
              contains code that is conditionally executed and jumps out
              of the loop, that code might be moved outside the loop and also
              outside of the exception region. This means that any exception
              raised by that code would not be handled by the desired handler.

  Status:     This problem is fixed in 3.15.

  Workaround: Avoid the construct above or compile with -O0, or specify
              setjmp/longjmp exception handling (using -gnatL).

KP-314a1-8721-002 Crash on scalar constraint of private protected component

  Problem:    Compiler crashes on some uses of a private component of a
              protected type, if the component has a subtype indication with
              an explicit constraint.

  Status:     This problem is fixed in 3.15

  Workaround: Introduce an explicit subtype declaration before the declaration
              of the protected type, and use the subtype in the component
              declaration.

KP-314a1-8721-001 Incorrect handling of Elaborate_Body pragma

  Problem:    In the static elaboration mode, Elaborate_Body is not good
              enough to ensure elaboration safety, because of possible calls
              to further units in the body. So you still in general need
              to use Elaborate_All when with'ing an Elaborate_Body unit. The
              static elaboration mode does not generate the required implicit
              Elaborate_All in this case, which can, in unusual cases, lead
              to undetected elaboration errors.

  Status:     This problem is fixed in 3.15

  Workaround: Introduce an explicit Elaborate_All pragma when with'ing an
              Elaborate_Body unit. Note that this may cause an elaboration
              circularity where none existed before (this may also happen
              when using version 3.15, since now this Elaborate_All pragma
              will be generated by default). For the latter case, a special
              debug flag -gnatdD returns GNAT to the previous 3.14 behavior
              and this can be used as a temporary measure to get around the
              new circularity.

KP-314a1-8720-009 Problem returning object > 32 KB on x86

  Problem:    In some cases the compiler will produce a "insn not found"
              message and get a Gigi 999 about when compiling a function
              returning more than 32 KB of data on the x86.

  Status:     This problem is fixed in 3.15.

  Workaround: Return the result using a pointer to the heap.

KP-314a1-8719-013 Spurious error on array of derived controlled type

  Problem:    The compiler generates spurious visibility errors on the
              generated initialization procedure for an array whose component
              type is a private derived controlled type that inherits its
              initialization procedure from its parent.

  Status:     This problem is fixed in 3.15

  Workaround: Add an explicit Initialize procedure for the derived type.

KP-314a1-8719-005 Spurious visibility errors with renaming of system

  Problem:    The compiler generates spurious errors on direct references to
              entities defined in an extension of System, when there is a use
              clause on a renaming of System but not on System itself.

  Status:     This problem is fixed in 3.15

  Workaround: Add an explicit use clause for System.

KP-314a1-8716-010 Wrong size computed for small discriminated records

  Problem:    If a discriminated record is small, has no variant parts,
              and has no dynamic arrays (an unusual combination), then
              if no explicit size clause is given, the default computation
              of the size by the compiler may be wrong, resulting in an
              error message complaining that the given size is too small
              (even though no size was given).

  Status:     This problem is fixed in 3.15

  Workaround: Provide an explicit appropriate size clause for the type.

KP-314a1-8715-008 Crash from objdump on some vxworks mips objects

  Problem:    The mips version of objdump sometimes crashes before giving
              any useful information when objects passed as parameters
              come from units with long names.

  Status:     This problem is fixed in 3.15

  Workaround: Rename the units to be examined by objdump with shorter names.

KP-314a1-8712-012 Missing documentation on combining of gnat switches

  Problem:    The switches -gnats and -gnatc cannot be combined with other
              options, and this restriction is not documented.

  Status:     This problem is fixed in 3.15 (documentation change only)

  Workaround: Do not combine switches -gnats or -gnatc with any other switch.

KP-314a1-8712-006 GNAT.Sockets.Check_Selector not working under Windows.

  Problem:    GNAT.Sockets.Check_Selector does not work under Win32 because
              C select API is not supported on sockets.

  Status:     This problem is fixed in 3.15

  Workaround: Do not use GNAT.Sockets.Check_Selector under Win32. This
              feature works fine under other supported platforms.

KP-314a1-8712-005 Compiler crash on packed array of records with rep clauses.

  Problem:    Compiler complains about missing units when compiling an array
              type declaration with a pragma Pack, when the component is a
              record type with a compact representation clause.

  Status:     This problem is fixed in 3.15

  Workaround: Add an explicit size clause for the record type.

KP-314a1-8707-010 Spurious error on static discriminant in case expression

  Problem:    The compiler complains about missing cases when the expresion
              in a case statement is a selected component that is a reference
              to the static discriminant value of a constrained object, and
              the discriminant subtype is more constrained that the value.

  Status:     This problem is fixed in 3.15

  Workaround: Use a qualified expression on the selected component.

KP-314a1-8704-002 Project files cannot contain string literal "-", "/"

  Problem:    Project files cannot contain string literals that correspond to
              operator symbols, such as "-", "/", "**" or "abs".

  Status:     This problem is fixed in 3.15

  Workaround: Avoid the use of strings corresponding to operator symbols.

KP-314a1-8628-013 Crash on an instantiation in unreachable code

  Problem:    Compiler crashes if an instantiation appears nested within a
              composite statement that is flagged as unreachable, e.g. after
              a return statement in a subprogram.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Remove unreachable code.

KP-314a1-8620-006 Missing xref entries for derived subprograms

  Problem:    The cross-reference information is missing references
              to derived subprograms. Such references should refer
              to the original parent program.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Manually search for any references of this kind if it is
              important to include them.

KP-314a1-8615-002 Compiler abort with subprogram-level exported variable

  Problem:    If a Pragma Export is specified for a variable inside
              a subprogram and the initializing expression is not a
              compile-time constant (or the type is tagged), the compiler
              will generate an internal error.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Move the variable in question to library level.

KP-314a1-8615-001 Obscure optimizer problem causes gigi 999 abort

  Problem:    In very unusual circumstances involving comparison operations
              where both operand can be determined to be constant and some
              other constant has been forced into memory (perhaps because
              of an unchecked converstion), the optimizer can run into
              difficulties causing an error. This will always show up as a
              gigi 999 abort; there is no danger of generating incorrect code.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Compile the affected unit in -O0 mode.

KP-314a1-8609-018 Visibility errors with types completed by tasks

  Problem:    If a limited private type with discriminants is completed with
              a task type, a reference to the corresponding entries of a
              record component that is of a subtype of the original private
              type are erroneoulsy rejected.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Put task declaration in visible part of package.

KP-314a1-8608-008 Succ/Pred case improperly considered non-static

  Problem:    If 'Pred is to 'First of an integer type, or 'Succ is
              applied to the 'Last value, then a Constraint_Error is
              normally raised. However, this construct is allowed
              within a larger static expression. The compiler was
              incorrectly rejecting such a usage as non-static.

  Status:     This problem is fixed in GNAT version 3.15.

  Workaround: Replace the usage by the equivalent +1 or -1 phrase.

KP-314a1-8605-011 Style_Checks pragma bombs if no arguments are given

  Problem:    If no arguments are given to the Style_Checks pragma,
              then a compiler crash results.

  Status:     This problem is fixed in GNAT version 3.15.

  Workaround: This is an illegal form in any case, the pragma requires
              at least one argument. Supply the required argument(s).

KP-314a1-8523-003 Compiler crash on front-end inlining with forward instance

  Problem:    Compiler crashes if the -gnatN (front end inlining) switch is
              set and the body of a function to be inlined appears within
              a body that also contains a forward instantiation, that is to
              say a instantiation of a local generic whose body appears
              later in the same unit.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Avoid the use of the -gnatN switch, or reorganize code so that
              the generic body appears before the instance. Note that the
              compiler cannot inline in this case without the reorganization
              (the fix is that now a warning is given saying that the attempt
              to inline is ignored, rather than causing a compiler crash).

KP-314a1-8517-021 Diagnostic tree output not properly indented

  Problem:    In some cases the tree output generated by the -gnatdt
              is excessively indented, and the amount of indentation
              can grow with program size.

  Status:     This problem is fixed in GNAT version 3.15.

  Workaround: Simply ignore the leading blank space. This does not affect
              the actual information in the output in any way other than
              to indent it too far to the right.

KP-314a1-8328-008 PowerPC assembly errors

  Problem:    GCC puts the jump tables (used for instance in case
              statements) in the .rotext section. The assembler is
              expecting it to be in the .text section. This generates
              an assembler error ("can not emit reloc").

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Compile the file without optimization.

KP-314a1-8323-003 Compiler crash on private protected type with new discr

  Problem:    Compiler crashes when a limited type with discriminants, one of
              whose subtypes is used in a component_declaration, is completed
              with a derived protected type that renames its parent's
              discriminants.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Complete the type with a record that contains a single component
              of the parent protected type.

KP-313a1-8314-001 Compiler crash on allocator for class-wide pointer

  Problem:    Compiler crashes on an allocator for a pointer-to-classwide type,
              when the designated type is a contrained discriminated type
              extension with a private parent.

  Status:     This problem is fixed in GNAT version 3.15

  Workaround: Introduce an object declaration with the classwide type, in
              order to freeze the type before the allocator.

KP-314a1-8303-002 Linker warning on Linux Redhat 7.0

  Problem:     When linking under Linux Redhat 7.0, a warning is generated
               about the use of tmpnam.

  Status:      This problem is fixed in GNAT version 3.15

  Workaround:  This message can simply be ignored.

KP-314a1-8121-009 ada_source_path and ada_object_path does not handle DOS drive

  Problem:     ada_source_path and ada_object_path files does not handle DOS
               style path specification having a drive letter.

  Status:      This problem is fixed in GNAT version 3.15.

  Workaround:  Use only path on a single drive. This means that you need to
               have all your sources in the save disk. Or you can use
               ADA_INCLUDE_PATH and ADA_OBJECTS_PATH which is handling right
               the DOS style drive letter.

KP-314a1-7913-003 gnatmem -q option is broken

  Problem:     gnatmem -q option is broken, when used gnatmem will exit with
               a constraint error on s-valuti.adb.

  Status:      This problem is fixed in GNAT version 3.15.

  Workaround:  Do not use this option. The standard and more verbose mode
               does not suffer from this bug.

KP-314a1-7904-004 GDB displays variables and fields only to first error

  Problem:     When GDB prints variables in response to 'info locals' or
               when it prints fields of a record, it will sometimes encounter
               an error when attempting to interpret a dynamic-sized value
               that is incompletely initialized (among other causes). At this
               point, it immediately stops printing and returns to the top
               level.

  Status:      This problem is fixed in GNAT version 3.15 (that is, on
               encountering an error of this sort, GDB will continue printing
               subsequent items).

  Workaround:  One can still print missing fields or variables individually.
               Also, one can often step the program a little until the
               offending variable becomes properly initialized.

KP-314a1-7830-007 Race condition with protected objects on SMP machines.

  Problem:     There is a very small window where a race condition can
               occur in the management of protected object entry call
               queues in the GNAT runtime. It manifests itself as a
               hang, or segmentation violation in the runtime. This
               problem has only been observed in one complex application
               on a fast multiprocessor machine.

  Status:      This problem is fixed in GNAT version 3.15

  Workaround:  Transform protected objects with entries into
               tasks or do not run on a multiprocessor machine.

KP-314a1-7813-006 Incorrect Long_Float return value printed by GDB

  Problem:     On x86 platforms, the return value printed by GDB after
               a finish command is incorrect if the return type is
               Long_Float.

  Status:      This problem is fixed in GNAT version 3.15.

  Workaround:  Modify the code to store the returned value in a variable,
               and print the value of the variable instead.

KP-314a1-7409-002 Infinite loop from objdump on some units

  Problem:     The debugging information generated by GNAT for certain
               types, such as array types for instance, is incorrect
               when the DBX format is used. It leads objdump into an
               infinite loop when trying to dump the debugging
               information from an object file.

  Status:      This problem is fixed in GNAT version 3.15

  Workaround:  Use gcc -S to generate an assembly listing for the unit in
               question instead of using objdump.

KP-314a1-6914-005 Bad argument value displayed by GDB on big endian machines

  Problem:     On big endian machines, the DBX debugging information
               generated by GNAT is incorrect for some kinds of subprogram
               parameters. This might show up as bad values displayed by
               GDB for these arguments when debugging optimized code.

  Status:      This problem is fixed in GNAT version 3.15.

  Workaround:  Compile the corresponding unit without optimization.


KP-314a1-6621-001 Stdcall function returning a double

  Problem:     On Windows an stdcall convention routine returning a double
               does not return the right value. The result is passed by
               reference instead of by value.

  Status:      This problem is fixed in GNAT version 5.00.

  Workaround:  Use a procedure with an out parameter instead of a function.
