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

For information about this release, see https://docs.parasoft.com/display/CPPDESKV1033/Updates+in+10.3.3