=============================
CodePeer 18 NEW FEATURES LIST
=============================

Copyright (C) 2021, AdaCore

This file contains a complete list of new features in version 18 of
CodePeer. A full description of all CodePeer features can be found in
the CodePeer documentation.

An ISO date (YYYY-MM-DD) appears in parentheses after the description line.
This date shows the implementation date of the feature. Any 18.0w wavefront
subsequent to this date will contain the indicated feature, as will any
subsequent 18 or later release.

NF-Q926-008 More flexible handling of -output-msg switches (2017-09-29)

  It is no longer necessary to specify switches for
  codepeer_msg_reader after -output-msg, and conversely, switches
  for codepeer can now be put after -output-msg, avoiding a common
  confusion with these switches.

NF-Q822-023 More precision for floating-point variables in loops (2017-09-21)

  CodePeer now computes more precise information about values of
  variables of floating-point types updated in a loop. It takes into
  account the value of the variable before the loop, the increment
  of the variable in an iteration of the loop, and the exit
  condition of the loop when the variable is part of this condition,
  as well as the relation of the variable to other variables that
  are part of the exit condition.

NF-Q803-025 Better subprogram input annotations (2017-08-05)

  If a subprogram takes one or more components of one global object
  as inputs (as opposed to reading the object as a whole), CodePeer
  formerly omitted these from the list of inputs in the annotations
  generated for the subprogram. Now the global object is listed as
  an input. This means that if either or both of Some_Record.Field_1
  and Some_Record.Field2 are global inputs to a subprogram, then
  Some_Record will be listed as an input.

NF-Q713-029 Improved handling of nested recursive subprograms (2017-09-12)

  Some cases of nested recursive subprograms could result in
  CodePeer issuing messages about too many iterations, terminating
  analysis of the subprograms. CodePeer now does a better job of
  processing such subprograms.

NF-Q525-021 Warnings suppressed on unreferenced in out formals (2017-06-08)

  CodePeer now takes pragma Unreferenced into account on formal
  parameters of mode in out, instead of ignoring the pragma and
  generating unwanted messages that suggest changing modes to in or
  out.

NF-Q516-044 Better handling of unused assignment messages (2017-06-01)

  When tracking review of messages from one run to another, CodePeer
  is now able to differentiate between multiple unused assignments
  of different values into the same variable in the same subprogram.

NF-Q502-013 Add identifier of a message to CSV output (2017-05-09)

  Add a new column Message_Id, which is an unique identifier of a
  finding, to CSV output.

NF-Q426-047 Command-line switches displayed in the GPS report (2017-12-06)

  The command-line switches used for CodePeer analysis are now
  stored in the database and displayed in the CodePeer report view
  in GPS.

NF-Q426-013 Improved handling of pragma Assume (2017-04-17)

  CodePeer now takes into account pragma Assume and will no longer
  generate messages about the possibility that the condition of an
  Assume (as opposed to Assert) pragma may yield "false".

NF-Q425-010 Switch to enable reporting of removed messages (2017-10-02)

  When reporting messages with -output-msg (or when running
  codepeer_msg_reader directly), the new switch -show-removed causes
  any messages that have been removed from the current CodePeer run
  relative to the baseline run to be output and indicated as
  removed.

NF-Q411-033 Excluded source files listed by -show-header (2017-04-20)

  The list of files excluded from analysis by CodePeer via the
  Excluded_Source_Files or Excluded_Source_Dirs project attributes
  is now available when using -output-msg[-only] -show-header.

NF-Q411-016 Show-header displays current and base "run" numbers (2017-04-20)

  If the "-show-header" flag is passed to codepeer after the
  "-output-msg[-only]" flag, two additional header lines are now
  displayed, with the form "current run number 7" and "base run
  number 2". The run numbers identify which execution of CodePeer
  produced the output, and which execution was used as the
  "baseline" for comparison for the purpose of identifying "added"
  or "removed" messages. In addition the date displayed in the
  header now corresponds to when the results were produced, rather
  than when they are being displayed.

NF-Q411-010 Warnings suppressed on unreferenced out parameters (2017-06-02)

  CodePeer now takes into account pragma Unreferenced on an actual
  parameter of mode out instead of ignoring it and generating a
  message.

NF-Q405-013 Simple access to the GNAT target runtime (2017-09-05)

  CodePeer will now automatically find the GNAT target runtime
  specified in a project file by simply putting the target GNAT
  compiler in your PATH. You no longer need to copy the runtime
  directory into the CodePeer installation.

NF-Q404-013 More efficient IDE/CodePeer exchange format (2017-04-19)

  The new format of IDE/CodePeer data exchange allows minimizing the
  amount of inspection information loaded at the opening of the
  CodePeer report and only loading annotation information when
  needed.

NF-Q322-030 Better messages for null statements (2017-03-27)

  CodePeer flags both dead null statements and predetermined test
  conditions which govern the possible execution of null statements.

NF-Q313-021 -csv and -show-header (2017-04-24)

  Mixing -csv and -show-header with -output-msg was disallowed in
  CodePeer 17.1 because it generates a invalid CSV file. Since this
  option was found useful by some users, it's available again. It's
  up to the user to postprocess (e.g. split) the output if needed.

NF-Q303-012 Better messages for .scil file creation failure (2017-03-15)

  If CodePeer unsuccessfully attempts to create a .scil file, then
  generate an additional error message which includes the full name
  of the file which could not be created. If it appears likely that
  the source of the problem is a Windows-specfic restriction on
  filename lengths, then that is also noted in a message.

NF-Q223-025 Support for -jxxx switch (2017-02-23)

  CodePeer now supports the -jxxx switch as an alias for the
  existing switch -jobs xxx, for consistency with other GNAT tools.
  This switch enables the use of multiple processes for SCIL
  generation and analysis.

NF-Q215-049 Compiler Mode now remembers previous messages (2017-02-21)

  When using the -compiler-mode switch, messages generated from the
  previous run on files that have not changed are now displayed.

NF-Q215-026 Preference to disable import of annotations (2017-03-02)

  A new GPS preference allows disabling the import of annotations,
  which can significantly improve performance.

NF-Q131-042 Improved analysis for 'Image (2017-04-17)

  CodePeer has now more knowledge about the bounds of Image
  attribute evaluations; for example, it knows the low bound = 1 and
  the high bound >= 1.

NF-Q130-016 Generation of test vectors disabled by default (2017-02-01)

  Support and documentation for test vectors has been removed, since
  this capability is only partially implemented and sometimes
  generates confusing information. It can be temporarily reenabled
  via a debug switch "-dbg-on test_vectors".

NF-PC20-025 Improved handling of SCIL version mismatch (2016-12-27)

  When a SCIL version mismatch is detected (e.g. when using a new
  version of CodePeer) CodePeer will now display a simple info
  message and will automatically remove obsolete files, and
  regenerate them.

NF-PB23-048 Better messages for access-to-subprogram uses (2016-11-30)

  In some cases a dereference of an access-to-subprogram value could
  result in a CodePeer message like "... requires Ptr >= 1" which is
  inappropriate for a non-numeric value. Instead, we now generate
  "... requires Ptr /= null" .

NF-PB15-041 Better handling of data modified by unknown calls (2016-11-26)

  Data that can possibly be modified by a call to a subprogram not
  analyzed by CodePeer are computed more precisely. In particular,
  bounds of arrays that are passed as out or in out parameters in a
  call to an unanalyzed subprogram are no longer considered as
  possibly modified by the call.

NF-PA27-018 Ada syntax is used for addresses in messages (2017-05-31)

  When codepeer generates a message which refers to the address of
  some entity named Foo, the message text is now "Foo'Address" in
  cases where previous versions of CodePeer generated "&Foo".

NF-PA26-051 Improved CodePeer handling of tagged types (2016-11-21)

  CodePeer encounters fewer capacity limitations (timeouts, too many
  value numbers) for examples which declare tagged types, including
  examples which instantiate Ada's predefined container generics.

NF-PA26-042 Support for annotations in the CSV output (2016-12-07)

  CodePeer annotations (preconditions, postconditions, global inputs
  and outputs, ...) can now be included in the CSV output using the
  -show-annotations switch (in addition to -output-msg -csv).

NF-PA10-013 More precise side effects for unknown calls (2017-10-04)

  CodePeer recognizes calls to system routines that have no other
  side effects than updating its out-mode parameters and uses this
  information to more precisely determine possible side effects of
  calls to such routines.

NF-P817-004 Better handling of 'Length in preconditions (2017-05-22)

  Less false positives when dealing with a 'Length attribute

NF-P325-007 Improved for-loop unrolling in generated SCIL (2017-09-27)

  When generating SCIL for a for-loop, CodePeer may decide to unroll
  the loop. Loops are now unrolled in more cases than before; the
  previous version would only unroll a loop whose body was a
  sequence of assignment statements. This unrolling results in more
  precise analysis results for some programs.

NF-P323-045 Message text improved for double negations (2017-05-04)

  In some cases where CodePeer formerly generated messages
  mentioning conditions of the form "not (X /= Value)", CodePeer now
  avoids the double negative and generates "X = Value".

NF-P223-021 Integration of GNAT warnings in CodePeer (2017-09-28)

  CodePeer can now collect GNAT warnings, add them into its
  database, and report them as any other warning messages. This is
  triggered by the new CodePeer switch "--gnat-warnings". More
  details are available in the user's guide.

NF-O729-027 Inspection timestamp is displayed in GPS (2017-09-21)

  Inspections' timestamps are now displayed on top of CodePeer's
  report view in GPS in addition to inspection numbers.
