Page tree

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

In this release, we've focused on support for new compilers and extended our support for coding standards, including MISRA 2008.

Support for New Compilers

  • Microsoft Visual C++ 14.1x/ 2017
  • WindRiver GCC 4.8.x (Static Analysis only)
  • IAR Compiler for ARM 8.11.x

Enhanced Unit Testing

We've added support for using enumerator values in data sources; see Handling Enum Values and Execution Tab Settings: Defining How Tests are Executed.

Enhancements to Static Analysis

In this release, we've added new static analysis rules to cover the MISRA C++ 2008; see New Code Analysis Rules.

The severity levels for MISRA C++ 2008 rules have been updated:

  • Required → Severity 2
  • Advisory → Severity 4
  • Document → Severity 5

Flow Analysis has been extended with support for C++11 Thread API (for BD-TRS rules) and new configuration options that allow you to:

  • disable terminators / functionswith the noreturn attribute
  • parameterize the BD-PB-VOVR rule with the "Report when there is at least one path where the value of the variable is not used" option; see the rule documentation for details.
  • disable reporting violations whose paths pass via inline assembly code
  • enable or disable all tainted data sources in the rule parameters

The RuleWizard Module has been extended with the following nodes and properties:

  • IsFinal - returns true if function or class was declared with 'final' or 'sealed' specifier
  • IsExplicitFinal - returns true if function or class was declared with 'final' specifier
  • IsSealed - returns true if function or class was declared with 'sealed' specifier

See RuleWizard 10.3.3 User's Guide for more details.

New Code Analysis Rules

Rule IDHeader
BD-PB-PTRARRA pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array
BD-TRS-CMFMake const member functions thread-safe
CODSTA-CPP-90Using-directives and using-declarations (excluding class scope or function scope using-declarations) shall not be used in header files
CODSTA-CPP-91The overloaded binary operator should be implemented in terms of its corresponding compound assignment operator
CODSTA-CPP-92All accessible entity names within amultipleinheritancehierarchyshouldbeunique
GLOBAL-COMPATDECLSAll declarations of an object or function shall have compatible types
GLOBAL-EXCSPECDECLIf a function is declared with an exception-specification, then all declarations of the same function (in other translation units) shall be declared with the same set of type-ids
GLOBAL-ONEDEFRULEThe One Definition Rule shall not be violated
GLOBAL-ONEFILEDECLA type, object or function that is used in multiple translation units shall be declared in one and only one file
GLOBAL-ONEUSEVARA project shall not contain non-volatile POD variables having only one use
GLOBAL-TEMPLNOINSTAll class templates, function templates, class template member functions and class template static members shall be instantiated at least one
GLOBAL-UNIQUETYPEDEFA typedef name (including qualification, if any) shall be a unique identifier
GLOBAL-UNUSEDTYPEA project shall not contain unused type declarations
GLOBAL-UNUSEDVIRTPARAMThere shall be no unused parameters (named or unnamed) in the set of parameters for a virtual function and all the functions that override it
GLOBAL-VIRTBASECLASSA base class shall only be declared virtual if it is used in a diamond hierarchy
MISRA2008-0_1_12There shall be no unused parameters (named or unnamed) in the set of parameters for a virtual function and all the functions that override it
MISRA2008-0_1_4A project shall not contain non-volatile POD variables having only one use
MISRA2008-0_1_5A project shall not contain unused type declarations
MISRA2008-0_1_6Avoid unused values
MISRA2008-0_1_9:All non-null statements shall either have at least one side-effect however executed or cause control flow to change
MISRA2008-0_3_1_aAvoid accessing arrays out of bounds
MISRA2008-0_3_1_bAvoid null pointer dereferencing
MISRA2008-0_3_1_cAvoid division by zero
MISRA2008-0_3_1_dAvoid buffer overflow due to defining incorrect format limits
MISRA2008-0_3_1_eAvoid overflow due to reading a not zero terminated string
MISRA2008-0_3_1_fDo not check for null after dereferencing
MISRA2008-0_3_1_gAvoid overflow when reading from a buffer
MISRA2008-0_3_1_hAvoid overflow when writing to a buffer
MISRA2008-0_3_1_iPointer arithmetic shall only be applied to pointers that address an array or array element
MISRA2008-0_3_1_j,=,,= shall not be applied to objects of pointer type, except where they point to the same array
MISRA2008-2_10_3A typedef name (including qualification, if any) shall be a unique identifier
MISRA2008-3_2_1All declarations of an object or function shall have compatible types
MISRA2008-3_2_2The One Definition Rule shall not be violated
MISRA2008-3_2_3A type, object or function that is used in multiple translation units shall be declared in one and only one file

MISRA2008-3_2_4

An identifier with external linkage shall have exactly one external definition
MISRA2008-5_0_16_aAvoid accessing arrays out of bounds
MISRA2008-5_0_16_bA pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array
MISRA2008-5_17_1The overloaded binary operator should be implemented in terms of its corresponding compound assignment operator
MISRA2008-5_19_1_aInteger overflow or underflow in constant expression in '+', '-', '*' operator
MISRA2008-5_19_1_bInteger overflow or underflow in constant expression in '' operator
MISRA2008-7_2_1An expression with enum underlying type shall only have values corresponding to the enumerators of the enumeration
MISRA2008-7_3_6Using-directives and using-declarations (excluding class scope or function scope using-declarations) shall not be used in header files
MISRA2008-10_1_2A base class shall only be declared virtual if it is used in a diamond hierarchy
MISRA2008-10_2_1All accessible entity names within amultipleinheritancehierarchyshouldbeunique
MISRA2008-14_5_1Do not declare non-member generic functions in associated namespaces
MISRA2008-14_6_2The function shall resolve to a function declared previously in the translation unit
MISRA2008-14_7_1All class templates, function templates, class template member functions and class template static members shall be instantiated at least one.
MISRA2008-15_4_1If a function is declared with an exception-specification, then all declarations of the same function (in other translation units) shall be declared with the same set of type-ids

MISRA2012-RULE-18_1_c

A pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array
PB-70An expression with enum underlying type shall only have values corresponding to the enumerators of the enumeration
TEMPL-13Do not declare non-member generic functions in associated namespaces
TEMPL-14The function shall resolve to a function declared previously in the translation unit

Updated Code Analysis Rules

  • BD-PB-OVERFWR, BD-PB-OVERFRD, BD-PB-VOVR, BD-SECURITY-ARRAY, BD-TRS-LOCK, BD-TRS-TSHL
  • CODSTA-103, CODSTA-163_b
  • COMMENT-13
  • INIT-06
  • JSF-071_b, JSF-111, JSF-171, JSF-187, JSF-204_b
  • MISRA2004-14_2, MISRA2004-15_1, MISRA2004-17_2, MISRA2004-17_3, MISRA2004-17_6_a
  • MISRA2008-0_1_6, MISRA2008-0_1_9, MISRA2008-0_3_1_g, MISRA2008-0_3_1_h, MISRA2008-0_3_1_i, MISRA2008-0_3_1_j, MISRA2008-5_0_17, MISRA2008-5_0_18, MISRA2008-5_19_1_a, MISRA2008-5_19_1_b, MISRA2008-6_4_3_a, MISRA2008-6_4_4, MISRA2008-7_5_1, MISRA2008-7_5_2_a
  • MISRA2012-DIR-4_1_g, MISRA2012-DIR-4_1_h, MISRA2012-DIR-4_1_i, MISRA2012-DIR-4_1_j, MISRA2012-DIR-4_13_d, MISRA2012-DIR-4_14_a, MISRA2012-RULE-1_3_d, MISRA2012-RULE-1_3_e, MISRA2012-RULE-1_3_m, MISRA2012-RULE-2_2_a, MISRA2012-RULE-3_2, MISRA2012-RULE-10_3_b, MISRA2012-RULE-12_4_a, MISRA2012-RULE-12_4_b, MISRA2012-RULE-16_1_b, MISRA2012-RULE-16_2, MISRA2012-RULE-18_2, MISRA2012-RULE-18_3, MISRA2012-RULE-18_6_a, MISRA2012-RULE-21_17_b
  • PB-11, PB-66_a, PB-66_b

Resolved Bugs and FRs

Bug/FR IDDescription
CPP-18579Rule MISRA2012-RULE-10_3_b (CODSTA-163_b) reports false positives
CPP-36999base_from_member.hpp", line 136: error: expected a ")" ::new ((void*) 0) MemberType( static_cast<T&&>(x)... ) 
CPP-38187The rule MISRA2004-17_6_a reports false positive violation
CPP-38241PB-11 incorrect behaviour
CPP-38336MISRA2004-17_6_a-3 reporting a false positive
CPP-38342Rule MISRA2004-15_1 throwing a false postive with 'default
CPP-38589CDD rules regression in C++test 10.3.2 (Japanese only)
CPP-38602Add C++11 "final" specifier for function to RuleWizard dictionary
CPP-38661Seeing log4cplus:ERROR when running the cpptestcli 
CPP-39168Cannot generate BDF using msbuild on Windows 7 
CPP-39210Report generation failed for exemplary ut_ds_details_to_csv.xsl (Visual Studio)
CPP-39211User rule may not be executed if there's a sub-rule (text rule) in the same directory
CPP-39356Parse errors related to C++11 with Keil for ARM v5.x 
CPP-39405 INIT-06 false positive for default move constructor 
CPP-39406 [DESKTOP] TC editor shows inappropriate selection for the radio button rule parameter
CPP-39407double argument to static_assert
CPP-39409MISRA2012-RULE-7_1 false positive
CPP-39410MISRA2012-RULE-16_4_b false positive
CPP-39415RVCT compilers accept the big-letter '--C99' flag
CPP-39495Support for IAR EWARM 8.x




  • No labels