=============================
CodePeer 22 NEW FEATURES LIST
=============================

Copyright (C) 2021, AdaCore

This file contains a complete list of new features in version 22 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 22.0w wavefront
subsequent to this date will contain the indicated feature, as will any
subsequent 22 or later release.

NF-U823-012 CodePeer stops at the first failing phase (2021-09-20)

  CodePeer now stops at the first failing phase. Up to this point,
  CodePeer would report the error along the way and either register
  an incomplete run without further complaints, or fail at a later
  phase (in both cases making the initial error easy to miss).

NF-U816-014 Range checks for slices of attribute Image (2021-08-27)

  CodePeer now detects invalid range bounds in slices prefixed with
  a reference to attributes Image, Wide_Image, or Wide_Wide_Image.

NF-U804-011 Stop emitting unuseful messages about init procs (2021-11-25)

  At levels less than 4, CodePeer no longer emits unuseful messages
  that initialization procedures always fail. Compiler can generate
  such initialization procedures and this doesn't pose any problem
  if they are not called. For example, an initialization procedure
  which always fails is generated for a record type with a field of
  a not-null access type without a default initialization. A problem
  would arise only when a variable of such type would be declared
  without explicit initialization and the initialization procedure
  would be therefore called. Such cases are reported directly by
  GNAT or by CodePeer when GNAT warnings are enabled.

NF-U726-001 Improved integrated Ada preprocessor in CodePeer (2021-07-26)

  The integrated Ada preprocessor, which can be enabled via e.g.
  -gnateD, has been enhanced to support syntax from other legacy Ada
  preprocessors, and in particular to support "endif" instead of
  "end if", and no longer requires a closing semicolon.

NF-U616-040 Better CWE information for precondition checks (2021-09-22)

  For precondition checks, CodePeer now displays more fine-grained
  information in the CWE column of the generated CSV reports. The
  CWEs are derived from the check that led to the precondition being
  emitted -- in contrast to the generic list of CWEs previously
  used.

NF-U414-032 Improved performance of level 0 (2021-05-07)

  The performance of level 0 was significantly improved. In
  particular, level 0 is now faster in the presence of record types
  with a high level of nesting, in the presence of dispatching calls
  and calls to access to subprograms, and in the presence of
  recursion or calls to subprograms that are available for CodePeer,
  but were not translated by CodePeer frontend for some reason.

NF-U409-032 Allow -level with -current (2021-04-29)

  It is now possible to use the switch -level, in addition to the
  switch -current, in order to look at the results of a specific run
  at a specific analysis level in the history.

NF-U409-024 Better message on useless reassignments (2020-09-23)

  CodePeer used to warn about "useless self assignment into X" on
  assignments X := E; when X was already equal to E. The phrasing of
  the message was deemed confusing, and the message is now "useless
  reassignment of X".

NF-TC14-035 Improve logging when processing results (2021-09-29)

  CodePeer adds more logging when processing results of static
  analysis and displays backtrace information when a critical error
  arises. This is important, because an error when processing
  results can prevent saving them in the database and displaying
  them. Logging of such critical errors facilitates finding the root
  cause of a problem and fixing it in situations where it is not
  possible to provide a reproducer.

NF-TC07-022 Analyze a set of files (2021-01-07)

  Using the new option -files-from, you can specify a file
  containing a list of source files to be analyzed by CodePeer. This
  new option is similar to -file but can be used when you need to
  analyze multiple sources.

NF-TB05-016 Incremental analysis at level 1 (2021-04-08)

  CodePeer's level 1 analysis is now incremental. At level 1,
  CodePeer does not reanalyze the files that have not changed since
  the last analysis, and simply reuses the results of the previous
  run.

NF-T803-001 Reducing the database size (2020-10-17)

  A CodePeer run generates many more annotations than messages, and
  furthermore this fluctuates significantly between different runs.
  As a result, the database can grow in size very quickly just
  because of old annotations. CodePeer now no longer stores old
  annotations in the database, and only keeps the annotations of
  each analysis level's current run.

NF-T618-010 New implementation of level 0 (2020-09-23)

  CodePeer's level 0 implementation ("LAL checkers") has been fully
  rewritten on top of the Infer analysis technology, developed by
  Facebook. The new level is based on an Ada frontend for Infer,
  developed by AdaCore, plus some Ada-specific analyses. Compared to
  the previous LAL checkers, improvements include:
  - Better analysis time, thanks to the use of a compiled langage.

   - Both the Linux and Windows versions take advantage of CPU-
  level parallelism. This was only available in the Linux version of
  CodePeer 20.2.

  - The analysis engine is now able to emit diagnostics on array
  index checks, as well as on length checks.

  - The new analysis is interprocedural: some preconditions or
  postconditions are internally generated for callees, and used
  inside callers. This usually results in more precise results.

NF-T409-030 New --infer-messages switch (2021-09-10)

  With the new --infer-messages switch, the user can now specify a
  list of Infer message kinds to filter the Infer messages. This
  switch works the same way as the switch --be-messages does with
  the main analysis messages.

NF-T331-024 Support for backtraces in external tools (2020-09-23)

  CodePeer can now display backtraces of external tools' messages.
  For now this only concerns Infer.

NF-T121-025 File exclusion support for aggregate projects (2020-09-23)

  Users can now exclude files from the analysis of an aggregate
  project. This is done with the Excluded_Source_Files project
  attribute, to be placed in the CodePeer package of the project
  that contains the files to be excluded.

NF-SA14-020 Flag unnecessary Annotate pragmas (2020-09-23)

  CodePeer now warns the user if it encounters Annotate pragmas,
  used to review CodePeer messages, that do not apply to any
  messages.

NF-S515-009 Tooltips in GNAT Studio Codepeer Report (2020-09-23)

  Hovering on a row of the Codepeer report will display its path in
  a tooltip.

NF-S514-022 Timestamps for CodePeer phases (2021-02-17)

  CodePeer now displays a timestamp at the start of each phase. This
  is available by default and only if -quiet is not given to
  CodePeer.

NF-S326-024 Support analysis of separate subunit (2020-09-23)

  CodePeer now supports being called on separate subunits, with
  either Analyze file under GNAT Studio, or the option -file on the
  command line. When called on a separate subunit, CodePeer analyzes
  its parent unit.

NF-RB12-044 Annotate pragma for external tools' messages (2020-09-23)

  CodePeer's users can now review any message with an Annotate
  pragma even if the message is not from CodePeer's backend analysis
  (this include GNAT warnings, messages from GNATcheck and messages
  from Infer).

NF-RA25-022 Progress bar for Infer (2020-09-23)

  GNAT Studio now displays a progress bar for the Infer phase of
  CodePeer.
