CodeSonar Release 3.7, patchlevel 0: Release Notes



What's New

Warning Classes There are a number of new warning classes in this release, including several classes that address concurrency issues such as data races.
Name Cross-References A new cross-referencing infrastructure tracks tokens in analyzed source code.
Metrics The CodeSonar analysis now computes and reports software metrics.
Expanded Search Functionality Users can now search for warnings, files, code, procedures, or metrics.
Multi-Process Hub The CodeSonar hub now uses separate processes to serve concurrent requests, rather than a single process.
Native 64-Bit Support All 64-bit packages now contain native 64-bit executables.
Improved VC++ Compatibility Improved compatibility with recent versions of VC++.
GUI Changes There are a number of GUI changes, including layout improvements along with changes arising from increased functionality in search, metrics, and cross-referencing.
Plug-in API Substantial changes, including access to new metric-related functionality.
General-Purpose API Substantial changes, including access to new name cross-reference functionality.
AST Changes This release has improved C++11 compatibility; there are substantial changes to the C/C++ AST definitions.

Changes To Requirements

For full, current requirements, see CodeSonar System Requirements.

Notes on Installing

The Installation manual section provides instructions for installing CodeSonar.

The Windows installer

Notes on Upgrading

Details

Warning Classes

This release uses CWE v 1.12.

New Warning Classes

The majority of new warning classes in this release are in support of the JPL Institutional Coding Standard for the C Programming Language, some of the new classes are specifically concerned with concurrency issues, and some are both.

The following table lists the new warning classes in this release and indicates for each class whether it supports JPL and/or concurrency-related checking.

Name Mnemonic JPL Concurrency
Basic Numerical Type Used LANG.TYPE.BASIC x  
Code Before #include LANG.PREPROC.CBI x  
Condition Contains Side Effects LANG.STRUCT.SIDEEFFECT x  
Conflicting Lock Order CONCURRENCY.LOCK.ORDER x x
Data Race CONCURRENCY.DATARACE   x
Function Pointer Conversion LANG.STRUCT.FUNCPTR.CONVERT x  
Global Variable Declared with Different Types LANG.STRUCT.DECLTYPE x  
Inconsistent Enumerator Initialization LANG.STRUCT.ENUMINIT x  
Locked Twice CONCURRENCY.LOCK.TWICE x x
Macro Defined in Function Body LANG.PREPROC.DEFINFN x  
Macro Undefined in Function Body LANG.PREPROC.UNDEFINFN x  
Missing Lock Acquisition CONCURRENCY.LOCK.NOLOCK x x
Missing Lock Release CONCURRENCY.LOCK.NOUNLOCK x x
Multiple Declarations of a Global LANG.STRUCT.DECLMULTI x  
Multiple Declarations On Line LANG.STRUCT.MULTIDECL x  
Multiple Statements On Line LANG.STRUCT.MULTISTMT x  
Nested Locks CONCURRENCY.LOCK.NESTED x x
No Matching #endif LANG.PREPROC.NOENDIF x  
No Matching #if LANG.PREPROC.NOIF x  
Not All Warnings Are Enabled BUILD.WALL x  
Task Delay Function CONCURRENCY.BADFUNC.DELAYD x x
Too Many Parameters LANG.FUNCS.TMFP x  
Too Much Indirection in Declaration LANG.STRUCT.TMID x  
Unknown Lock CONCURRENCY.LOCK.UNKNOWN x x
Use of #undef LANG.PREPROC.UNDEF x  
Warnings Not Treated As Errors BUILD.WERROR x  
Custom Metric Classes METRIC.CUSTOM    

Changes to Warning Classes

Class Name Mnemonic Change
Function Pointer LANG.STRUCT.FUNCPTR.CALL Mnemonic was previously LANG.STRUCT.FUNCPOINT.
Potential Unbounded Loop LANG.STRUCT.ULOOP The check has been modified: a loop is now considered unbounded if its bound is not statically determinable (previously, the bound only had to be constant).
Unchecked Parameter Dereference LANG.STRUCT.UPD The check has been modified: the parameter can now be checked at any point before the dereference (previously, the check had to be inside the function).

Name Cross-References

A new cross-referencing infrastructure tracks tokens in analyzed source code, providing extensive functionality for code navigation and searching. In particular:

Metrics

The CodeSonar analysis now computes and reports software metrics.

Expanded Search Functionality

This version of CodeSonar includes greatly expanded search functionality. In particular, users can now search over five different domains, where previously the only search domain was warnings (and, in restricted circumstances, files). The following table summarizes the five domains.

domain search results are... ...each linked to
Warnings Warnings A Warning Report.
Files Source file instances A Source Listing.
Code Occurrences of non-keyword tokens The corresponding line in a Source Listing.
Procedures Procedures The procedure definition in a Source Listing.
Metrics Code components for which metric values will be reported, plus the corresponding metric values. The relevant code component. For file-granularity metrics, this is the file's Source Listing. For procedure-granularity metrics, it is the procedure definition (within a Source Listing).

With this expansion in functionality:

Note on File Search

The behavior of the file search language has changed slightly: plain text terms are now only compared against file basename (previously they compared against a broader set of file properties).

Multi-Process Hub

The CodeSonar hub now uses separate processes to serve concurrent requests, rather than a single process.

Native 64-Bit Support

All 64-bit packages now contain native 64-bit executables.

Improved VC++ Compatibility

Compatibility with recent versions of VC++ has been improved.

GUI Changes

There are a number of GUI changes in this version of CodeSonar.

In addition to the changes to individual page types outlined below, there are some changes to the standard GUI header that arise from the newly extended search capabilities.

New GUI Page Types

Code Search Results Presents the results of a search in the code domain (new functionality).
Metric Report Presents the results of a search in the metric domain (new functionality).
Metric Report Creation Allows the user to specify which metrics should appear in a metric report.
Procedure Search Results Presents the results of a search in the procedure domain (new functionality).
Scheme Console When enabled for a particular analysis, provides access to an interactive Scheme interpreter running within the analysis process.
Undefined Functions Report A hub-wide report lists the undefined functions encountered by the most recent analyses on the hub. An analysis-level report is available for each analysis that encounters one or more undefined functions.

Modified GUI Page Types

Admin Settings
  • There is no longer an Include Paths tab: it has been replaced by configuration file parameter SYSTEM_INCLUDE_PATHS
  • There is a new Visibility Defaults tab for managing default values of visibility filters in the various search domains. The setting for "Visible Warnings for New and Anonymous Users" is now on this tab, instead of under Warning Defaults.
  • Hub Settings options "http interface", "http port", and "trace connections" are no longer available.
Advanced Search The page is now tabbed, with a separate tab for each search domain.
  • The Warnings tab provides the functionality previously provided by the entire page.
Analysis The page is now tabbed, and information about the analysis is no longer displayed by default.
Warnings tab Contains the table of analysis warnings previously displayed on the Analysis page.
Files tab Contains the table of file information previously displayed on a separate Analysis Files page.
  • The table now also contains one column for each file-granularity metric computed by the analysis.
Procedures tab Contains information about individual analyzed procedures (new functionality), including values of procedure-granularity metrics.
Analysis Details Can now be expanded or collapsed as required.
Other Functionality The page now also offers metric report shortcuts and a link to the Scheme console.
Analysis Files The information is now presented as a tab of the Analysis page (with the same URL as previously)
Charts and
Chart Tables
Metric values can now be charted, along with warning counts and file counts as previously.
Home The table of projects has additional columns corresponding to analysis-granularity metrics that have been computed.
Saved Searches (Previously called "Deleted Saved Searches".)
The page is now tabbed, with a separate tab for each search domain.
Source Listing Information about the file and analysis is no longer displayed by default. Instead, it can be expanded or collapsed as required. The information window has a new info tab, providing enhanced cross-referencing information.
Warning Report The upper part of the page has been substantially reorganized.
  • Warning details are no longer displayed by default. Instead, they can be expanded or collapsed as required.
  • User-controlled warning properties (Priority, State, Finding, Owner, Notes) are summarized in one line at the top of the page.
  • Control annotations now include notification whenever an undefined function is used.
There are also changes in the source excerpt presentation:
  • The Options menu has moved to the left side of the excerpt header. It is joined by a Show Events menu, which replaces the previous Show: links.
  • The information window has a new info tab, providing enhanced cross-referencing information.
Warning Search Results Previously called "Search Results": there are now multiple search domains, each with its own result page type.

Deleted GUI Page Types

The Server Utilization page type no longer exists.

Changes to Plug-In API

There have been substantial additions to the CodeSonar Plug-In API, along with some modifications to existing functions and types.

New Functions New functions provide access to the new metric functionality in this release. There are also some new kinds of program visitor and some new ways to report warnings.
Modified Functions Some parameters have changed to more specific types. Visitors now all take an additional context parameter.
Modified Types Function pointers used for visitors now all take an additional context parameter. Some typedefs and struct fields have changed to more specific types.

New Plug-In API functions

C function Scheme Function Notes
csonar_add_program_drop_finish_visitor() codesonar:add-program-drop-finish-visitor Add a program visitor to be invoked at the end of the drop phase (as opposed to program drop visitors, which are invoked at the beginning of the drop phase).
csonar_add_cache_cleanup_visitor() codesonar:add-cache-cleanup-visitor Invoked periodically as the analysis progresses.
csonar_warningclass_lookup() - Get the warning class with the specified ID.
csonar_warningclass_id() - Get the ID for the specified warning class.
csonar_report_file_warning() codesonar:report-file-warning Issue a warning associated with a particular source file instance, as opposed to a specific source location or set of locations.
csonar_report_analysis_warning() codesonar:report-analysis-warning Issue a warning with no association to a file or procedure.
codesonar:report-metric Report a metric value to the hub.
csonar_metric_get_granularity() codesonar:metric-granularity Get the granularity of a metric class.
csonar_metric_name() codesonar:metric-name Get the short name of a metric class.
csonar_metric_description() codesonar:metric-description Get the description of a metric class
codesonar:metric-get-value Get the value of a metric
codesonar:metric-create-class Create a new metric class
csonar_metric_get_class() codesonar:metric-get-class Get the metric class object with the specified name and granularity.
csonar_get_metric_from_cs_metric() - Get the metric class corresponding to a specified CodeSurfer metric.
csonar_get_cs_metric_from_metric() - Get the CodeSurfer metric corresponding to a specified metric class.
codesonar:metric-get-all-classes Iterate over the metric classes of a specified granularity.
codesonar-metric-retract Retract a metric value.

Modified Plug-In API functions

C function Notes
Context parameter ctx added.
csonar_report_path_warning() len parameter now has type cs_size_t (previously cs_integer)
csonar_report_locations_warning() num_locs parameter now has type cs_size_t (previously cs_integer)
csonar_xform_query_pre_bounds() lb and ub parameters now have type csint32* (previously cs_integer*)
csonar_xform_query_post_bounds() lb and ub parameters now have type csint32* (previously cs_integer*)

Modified Plug-In API Types

type Notes
C
  enum cs_cfg_path_node_flags New elements cscpnf_contributes, cscpnf_new_path.
enum cs_xform_query_result New element csxqr_redundant_suspect.
struct cs_access_path_struct variant_union.offset_in_bits field type now cs_size_t (previously cs_integer)
struct cs_step_visitor_dispatch_t open, copy, close and transition members now all take an additional context parameter ctx.
struct cs_warning_id pid field type now csint64 (previously cs_integer).
wid field type now csunit64 (previously unsigned long).
struct cs_xform_expr a and b field type now both csint32 (previously cs_integer)
Context parameter ctx added to function pointer type.
Scheme
LOCATIONS_NODE_FLAG renamed from LOCATIONS_FLAG
PATH_NODE_FLAG renamed from PATH_FLAG, new elements "contributes", "new-path"
REPORT_FLAG renamed from POINT_FLAG
XFORM_QUERY_RESULT new element "redundant-suspect"

Changes to General-Purpose API

There have been substantial additions to the General-Purpose API, along with some modifications to existing functions and types.

New Functions
  • The new name cross-reference functionality in this release can be accessed through a new Name Cross-References API.
  • The Source Files API now has a first-class notion of "source file" in addition to the previously-existing notion of "source file instance". New functions for operating on source files have been added. There are also new functions for obtaining various information about compilation units.
  • The ABS_LOC, PDG, PDG_VERTEX, and SDG APIs each have a small number of new functions.
  • There are new general-purpose API functions that provide access to the new metric functionality, but we recommend using the plug-in API functions for metric management rather than the general-purpose ones.
Modified Functions A number of functions have modified type signatures: parameters or return values have changed to more specific types.
Deleted Functions 8 functions have been deleted in this release.
Modified Types A number of typedefs and struct fields have changed to more specific types.

New General-Purpose API Functions

C function Scheme Function Notes
Name Cross-References
xref-kinds Operations on kinds.
xref-roles Operations on roles (usages).
  • xref-kind-role-decompose
  • xref-kind-role-compose
  • xref-kind-roles
Operations on kind-role (kind-usage) pairs.
xref-def-for-each Iterate over the definitions associated with the specified occurrence.
xref-occ-for-each Iterate over the occurrences with the specified properties.
xref-intra-def-for-each Iterate over the occurrences in a specified code region.
xref-namehash Hash functions.
cs_xref_query_execute() xref-query Execute a query over all token occurrences.
Metrics
  • cs_metric_create_analysis()
  • cs_metric_create_compunit()
  • cs_metric_create_file()
  • cs_metric_create_procedure()
metric-create Create a new metric class.
cs_metric_create_derived() metric-create-derived Create derived metrics.
cs_metric_description() metric-description Get the description for a metric class.
cs_metric_equal() - Compare two cs_metrics.
cs_metric_from_refstring() metric-from-refstring Look up a metric class via a string that contains both the name and granularity.
  • cs_metric_getvalue_analysis()
  • cs_metric_getvalue_compunit()
  • cs_metric_getvalue_file()
  • cs_metric_getvalue_procedure()
metric-get-value Retrieve the value of a metric.
cs_metric_get() metric-get Get the metric class object with the specified name and granularity.
cs_metric_get_granularity() metric-granularity Get the granularity for a metric class.
cs_metric_granularity_from_string() string->metric-granularity Convert a string representation into a metric granularity.
cs_metric_granularity_name() metric-granularity->string Get the string representation of a metric granularity.
cs_metric_hash() - Hash function for cs_metric.
  • cs_metric_iter_first()
  • cs_metric_iter_next()
  • cs_metric_iter_close()
metric-get-all Iterate over the metric classes of a specified granularity.
cs_metric_name() metric-name Get the short name for a metric class.
cs_metric_register_file_closure() - Set the function which should be used to determine whether to compute metrics for a given file instance.
ABS_LOC
cs_abs_loc_func_attrs() abs-loc-func-attrs Get the attributes associated with a function ABS_LOC
cs_abs_loc_var_attrs() abs-loc-var-attrs Get the attributes associated with a non-function ABS_LOC.
PDG
cs_edge_label_compare() - Compare two edge labels
cs_pdg_friendly_name64() - Like cs_pdg_friendly_name(), but provides a cs_const_str64 (always 64-bit) rather than a cs_string (width is system-dependent).
cs_pdg_callers_count() pdg-callers-count Get the number of call sites to a PDG.
cs_pdg_has_incomplete_summary() pdg-has-incomplete-summary? Check if summary edge information may be incomplete for a PDG.
cs_pdg_scc_id() pdg-scc-id Get the a list of the strongly connected components to which a PDG belongs
PDG_VERTEX
cs_pdg_vertex_hash_seed() - Hash function for PDG_VERTEX.
SDG
cs_s_unload_sdg() s-unload-sdg Close the currently loaded SDG.
cs_sdg_is_read_only() sdg-read-only?  Check: is the current project read-only?
Source Files
cs_file_color_map_iter_scan_first() - Open a cs_color_map_iter iterator that skips the first part of a file instance.
cs_file_compiler_model() file-compiler-model Get the name of the compiler model used to build a compilation unit.
cs_file_effective_native_flags() file-effective-native-flags Get the effective flags used to build a compilation unit.
cs_file_frontend_command_line() file-frontend-command-line Get the front end command line used to build a compilation unit.
cs_file_get_include_name64() - Get the absolute path name for a source file instance.
cs_file_native_command_line() file-native-command-line Get the native command line used to build a compilation unit.
cs_file_path_hash64() file-path-hash64 64-bit hash for file path.
cs_file_webid() file-webid Get the Web ID of a compilation unit
cs_sf_line_pdgs() file-sf-line-pdgs Get a list of the PDGs whose definition is at the specified source file and line number.
cs_sfid_sf() sfid->sf Get the source file corresponding to a specified file instance.
cs_sf_arbitrary_sfid() sf->arbitrary-sfid Get an (arbitrary) instance of a specified source file
sf-for-each-sfid Iterate over the instances of a source file
  • sf?
Basic operations on new "source file" data type.
cs_uid_is_shared_unit() uid-is-shared-unit? Check: can a compilation unit be shared by multiple projects and analyses?
cs_uid_is_valid() uid-is-valid? Validity test for a compilation unit ID.
cs_uid_to_integer() - Convert compilation unit ID to a csuint32.
cs_uid_unitline_to_sf_line() uid-unitline->sf-line Translate a line number in a preprocessed compilation unit to the unpreprocessed source file and line number it came from.

Modified General-Purpose API Functions

Function Changed New Type Previously
cs_abs_loc_compare() return value int cs_integer
cs_abs_loc_get_param() num parameter cs_size_t cs_integer
cs_abs_loc_set_cardinality() return value cs_size_t cs_integer
cs_abs_loc_set_get_outstanding_references() return value cs_size_t cs_integer
cs_ast_compare() return value int cs_integer
cs_ast_create() num_fields parameter cs_size_t cs_integer
cs_ast_dump( ) attribute_depth parameter cs_size_t cs_integer
cs_ast_fast_compare() return value int cs_integer
cs_basic_block_cfg_edge_set_cardinality() return value cs_size_t cs_integer
cs_basic_block_compare() return value int cs_integer
cs_basic_block_set_cardinality() return value cs_size_t cs_integer
cs_basic_block_set_get_outstanding_references() return value cs_size_t cs_integer
cs_cfg_edge_set_cardinality() return value cs_size_t cs_integer
cs_cfg_edge_set_get_outstanding_references() return value cs_size_t cs_integer
cs_exit() code parameter int cs_integer
cs_f_pred() threshold parameter cs_size_t cs_integer
cs_f_succ() threshold parameter cs_size_t cs_integer
cs_file_count_lines() blank_count, comment_count, code count, mixed_count parameters cs_size_t* cs_integer*
cs_file_error_count() num_errors parameter cs_size_t* cs_integer*
cs_file_warning_count() num_warnings parameter cs_size_t* cs_integer*
cs_get_interest_sets() result_cardinality parameter cs_size_t* cs_integer*
cs_int_pair_set_cardinality() return value cs_size_t cs_integer
cs_int_pair_set_delete() int1 and int2 parameters csuint32 cs_unsigned integer
cs_int_pair_set_get_outstanding_references() return value cs_size_t cs_integer
cs_int_pair_set_member() int1 and int2 parameters csuint32 cs_unsigned integer
cs_int_pair_set_put() int1 and int2 parameters csuint32 cs_unsigned integer
cs_ips_to_pdgvs_map_get_outstanding_references() return value cs_size_t cs_integer
cs_ips_to_pdgvs_map_lookup() integer1 and integer2 parameters csuint32 cs_unsigned integer)
cs_labeled_pdg_edge_set_cardinality() return value cs_size_t cs_integer
cs_labeled_pdg_edge_set_get_outstanding_references() return value cs_size_t cs_integer
cs_list_to_abs_loc_set() cardinality parameter cs_size_t cs_integer
cs_list_to_pdg_vertex_set() cardinality parameter cs_size_t cs_integer
cs_major_version() return value int cs_integer
cs_minor_version() return value int cs_integer
cs_patch_version() return value int cs_integer
cs_pdg_compare() return value int cs_integer
cs_pdg_exceptional_exits() result_cardinality parameter cs_size_t* cs_integer*
cs_pdg_formal_in() fi_rank parameter cs_size_t cs_integer
cs_pdg_procedure_id() return value csint64 cs_integer
cs_pdg_retrieve_basic_block() id parameter csint64 cs_integer
cs_pdg_retrieve_vertex() id parameter csint64 cs_integer
cs_pdg_set_formals_in() cardinality parameter cs_size_t cs_integer
cs_pdg_vertex_compare() return value int cs_integer
cs_pdg_vertex_condition_number() return value csuint64 cs_integer
cs_pdg_vertex_exceptional_returns() result_cardinality parameter cs_size_t* cs_integer*
cs_pdg_vertex_id() return value csint64 cs_integer
cs_pdg_vertex_rank() out parameter cs_size_t* cs_integer*
cs_pdg_vertex_set_actual_outs() num_vertices parameter cs_size_t cs_integer
cs_pdg_vertex_set_actual_ins() num_vertices parameter cs_size_t cs_integer
cs_pdg_vertex_set_cardinality() return value cs_size_t cs_integer
cs_pdg_vertex_set_get_outstanding_references() return value cs_size_t cs_integer
cs_pdg_vertex_set_intersect_size() out_set parameter cs_size_t* cs_integer*
cs_pdg_vertex_set_multi_union() list_cardinality parameter cs_size_t cs_integer
cs_s_predecessors() threshold parameter cs_size_t cs_integer
cs_s_successors() threshold parameter cs_size_t cs_integer
cs_s_read_sdg() new parameter read_only
cs_s_var_predecessors() threshold parameter cs_size_t cs_integer
cs_s_var_successors() threshold parameter cs_size_t cs_integer
cs_sdg_compilation_units() result_cardinality parameter cs_size_t* cs_integer*
cs_sdg_error_count() out_i parameter cs_size_t* cs_integer*
cs_sdg_sccs() result_cardinality parameter cs_size_t* cs_integer*
cs_set_interest_sets() cardinality parameter cs_size_t cs_integer
cs_sfid_compare() return value int cs_integer
cs_uid_compare() return value int cs_integer

Deleted General-Purpose API Functions

C function Scheme Function Notes
cs_uid_to_cs_integer() - Replaced by cs_uid_to_integer().
cs_file_content_hash() - -
cs_file_get_modification_time() file-get-modification-time -
cs_file_path_hash_double() - Replaced by cs_file_path_hash64().
cs_tokdef_kind_name()
cs_file_tokdef_iter_first()
cs_file_tokdef_iter_next()
cs_file_tokdef_iter_close()
file-tokdef-for-each Replaced by richer operations in the new Name Cross-References API.

Modified General-Purpose API Types

Type Change
enum cs_syntax_kind New enum values added: cs_syntax_kind_string, cs_syntax_kind_include_directive.
typedef cs_ast Type now csint32 (previously long).
typedef cs_ast_family Type now csint32 (previously long).
struct cs_uid_pdgvslist npdgs field type now cs_size_t (previously cs_integer).
struct cs_pdglist_pair n_sublist_elements field type now cs_size_t (previously int).
struct cs_sdg_uids_iter data field type now cs_size_t[2] (previously cs_integer[2]).
state field type now int (previously cs_integer).
typedef cs_column Type now csuint16 (previously unsigned short).
typedef cs_line Type now csuint32 (previously unsigned long).
typedef cs_uid Type now csuint32 (previously cs_integer).
typedef cs_unitline Type now csuint32 (previously cs_integer).

AST Changes

There are substantial changes to the C/C++ AST definitions in this release.

New Unnormalized C/C++ AST Classes

The following unnormalized AST classes have been added.

attributes
dot expressions
function calls
generic shift
generic shift-assign
pragmas
scope
sizeof
templates
type adjustment and casting
type traits
  • cc:type-traits-builtin-operation
    • cc:is-trivial
    • cc:is-standard-layout
misc

Unnormalized C/C++ AST Class Field Changes

The following classes have undergone field changes. Changes can include adding a field, removing a field, or changing a field from child to attribute or from attribute to child. See the class documentation for field details.

Unnormalized C/C++ AST Inheritance Hierarchy Changes

The immediate superclass for the following classes has changed.

Classes Immediate Superclass is Now (was previously)
  • cc:has-nothrow-assign
  • cc:has-nothrow-constructor
  • cc:has-nothrow-copy
  • cc:has-trivial-assign
  • cc:has-trivial-constructor
  • cc:has-trivial-copy
  • cc:has-trivial-destructor
  • cc:has-virtual-destructor
  • cc:is-abstract
  • cc:is-base-of
  • cc:is-class
  • cc:is-convertible-to
  • cc:is-empty
  • cc:is-enum
  • cc:is-pod
  • cc:is-polymorphic
cc:type-traits-builtin-operation cc:microsoft-builtin-operation
cc:is-union cc:builtin-operation cc:microsoft-builtin-operation
cc:sizeof cc:expr
cc:executable-scope cc:scope
cc:non-executable-scope cc:scope

Deleted Unnormalized C/C++ AST Classes

The following unnormalized AST classes have been removed. An asterisk "*" next to an entry in the "Used Instead" column denotes an AST class introduced in this release (see new normalized classes, new unnormalized classes).

  Classes Removed Used Instead
unary -
  • cc:fnegate
  • cc:fxnegate
  • cc:inegate
  • cc:xnegate
cc:generic-negate
++
  • cc:fpre-incr
  • cc:fxpre-incr
  • cc:ipre-incr
  • cc:ppre-incr
cc:generic-pre-incr
  • cc:fpost-incr
  • cc:fxpost-incr
  • cc:ipost-incr
  • cc:ppost-incr
cc:generic-post-incr
--
  • cc:fpre-decr
  • cc:fxpre-decr
  • cc:ipre-decr
  • cc:ppre-decr
cc:generic-pre-decr
  • cc:fpost-decr
  • cc:fxpost-decr
  • cc:ipost-decr
  • cc:ppost-decr
cc:generic-post-decr
+
  • cc:fadd
  • cc:fxadd
  • cc:iadd
  • cc:xadd
cc:generic-add
-
  • cc:fsubtract
  • cc:fxsubtract
  • cc:isubtract
  • cc:xsubtract
cc:generic-subtract
*
  • cc:fmultiply
  • cc:fxmultiply
  • cc:imultiply
  • cc:xmultiply
cc:generic-multiply
/
  • cc:fdivide
  • cc:fxdivide
  • cc:idivide
  • cc:xdivide
cc:generic-divide
==
  • cc:feq
  • cc:fxeq
  • cc:ieq
  • cc:peq
  • cc:pmeq
  • cc:xeq
cc:generic-eq
!=
  • cc:fne
  • cc:fxne
  • cc:ine
  • cc:pne
  • cc:pmne
  • cc:xne
cc:generic-ne
>
  • cc:fgt
  • cc:fxgt
  • cc:igt
  • cc:pgt
cc:generic-gt
<
  • cc:flt
  • cc:fxlt
  • cc:ilt
  • cc:plt
cc:generic-lt
>=
  • cc:fge
  • cc:fxge
  • cc:ige
  • cc:pge
cc:generic-ge
<=
  • cc:fle
  • cc:fxle
  • cc:ile
  • cc:ple
cc:generic-le
<<
  • cc:fxshiftl
  • cc:ishiftl
cc:generic-shiftl *
>>
  • cc:fxshiftr
  • cc:ishiftr
cc:generic-shiftr *
<?
  • cc:ignu-min
  • cc:fgnu-min
  • cc:pgnu-min
cc:generic-gnu-min
>?
  • cc:ignu-max
  • cc:fgnu-max
  • cc:pgnu-max
cc:generic-gnu-max
=
  • cc:fassign
  • cc:fxassign
  • cc:iassign
  • cc:passign
  • cc:pmassign
  • cc:sassign
  • cc:xassign
cc:generic-assign
+=
  • cc:fadd-assign
  • cc:fxadd-assign
  • cc:iadd-assign
  • cc:xadd-assign
cc:generic-add-assign
-=
  • cc:fsubtract-assign
  • cc:fxsubtract-assign
  • cc:isubtract-assign
  • cc:xsubtract-assign
cc:generic-subtract-assign
*=
  • cc:fmultiply-assign
  • cc:fxmultiply-assign
  • cc:imultiply-assign
  • cc:xmultiply-assign
cc:generic-multiply-assign
/=
  • cc:fdivide-assign
  • cc:fxdivide-assign
  • cc:idivide-assign
  • cc:xdivide-assign
cc:generic-divide-assign
<<=
  • cc:fxshiftl-assign
  • cc:ishiftl-assign
cc:generic-shiftl-assign *
>>=
  • cc:fxshiftr-assign
  • cc:ishiftr-assign
cc:generic-shiftr-assign *
dot expressions
  • cc:bit-field
  • cc:extract-bit-field
  • cc:op-field
  • cc:value-bit-field
  • cc:value-field
cc:dot-field *
  • cc:lvalue-dot-static
  • cc:rvalue-dot-static
cc:dot-static *
  • cc:pm-arrow-field
cc:pm-points-to-field *
  • cc:pm-field
casts
  • cc:const-cast
  • cc:reinterpret-cast
  • cc:static-cast
cc:cast (or subclasses)
function calls
  • cc:generic-call
cc:function-call
  • cc:pm-call
  • cc:generic-member-call
  • cc:virtual-call
  • cc:vacuous-destructor-call
  • cc:value-vacuous-destructor-call
misc
  • cc:function-local-initializer
  • cc:local-static-variable-init
Initializations are now under the variable.
  • cc:lvalue-from-struct-rvalue
No direct replacement.
  • cc:lvalue-real-part
cc:real-part
  • cc:lvalue-imag-part
cc:imag-part
  • cc:padd-subsc
cc:subscript
  • cc:routine-address-expr
cc:expr-routine *
  • cc:switch-clause
cc:switch-case *
  • cc:variable-address-expr
cc:address-op

New Normalized C/C++ AST Classes

The following normalized AST classes have been added.

Modified Normalized C/C++ AST Classes

The following classes have undergone field changes. Changes can include adding a field, removing a field, or changing a field from child to attribute or from attribute to child. See the class documentation for field details.

Customer Tickets Fixed

6675 Leak report location
6684 'rank' WARNING_FILTER mostly useless
6916 Redundant text in warning endbox
6994 Fixed buffer overrun on global remains in later increments
7080 More helpful create account failure error
7137 WriteFile always initializes lpNumberOfBytesWritten
7154 Change multiple warnings emails every user on the hub
7172 FUNCTION_MAP doesn't work for malloc, free
7217 Correction shows even for licenses with no line limit
7236 Plug-in crash from use of cs_ast_ordinal_name()
7250 Right-click on column header should bring up menu
7461 Hub exception: Incorrect padding
7587 Add option to detect leak of allocated memory after use in loop
7692 _M_check_len()