此版本包括以下增强功能:

发布日期:2023 年 5 月 31 日

增强 Automotive Compliance Pack

  • MISRA C:2012 规则集已根据“MISRA C:2012 Amendment 4”中的新增规则和更新规则进行扩展。

此外,引入“MISRA C:2023”文件后(该文件合并了 MISRA C:2012 及所有修正内容,包括 Amendment 4),“MISRA C 2012”内建测试配置已更名为“MISRA C 2023 (MISRA C 2012)”。此配置包含项由 Parasoft·C/C++test 提供的所有 MISRA C:2023 / MISRA C:2012 及 Amendment 4 规则

注意:为确保合规流程的兼容性和连续性,规则标识符没有更改,“MISRAC2012”前缀仍用于所有 MISRA C:2023 / MISRA C:2012 及 Amendment 4 规则(例如“MISRAC2012-RULE_11_10-a”)。

  • HIS Source Code Metrics 配置扩展了路径数(PATH)指标 / METRICS-44。

增强静态分析

  • 增强流分析引擎的性能。
  • 普遍增强静态分析规则准确性。
  • 添加新的代码分析规则,增加合规标准的覆盖率。有关新增规则和更新规则的列表,请参阅新增规则更新规则

平台支持

C/C++test 现在支持 Windows Server 2022。 

编译器支持

现已支持以下编译器:

编译器名称编译器标识符
GNU GCC 12 for x86-64gcc_12-64
GNU GCC 12 for aarch64/arm64gcc_12-aarch64
GNU GCC 11 for aarch32/armgcc_11-aarch32
GNU GCC 10 for aarch32/armgcc_10-aarch32
GNU GCC 9 for aarch64/arm64gcc_9-aarch64
GNU GCC 9 for aarch32/armgcc_9-aarch32
GNU GCC 8 for aarch32/armgcc_8-aarch32
Hexagon 8.6hexagon-clang_8_6
WindRiver Clang/ARM 9.0wrclang_9_0-x86_64, wrclang_9_0-aarch32

此外,还增强了对 Microsoft Visual C++ Compiler 17.4 的支持。

请参阅编译器

更新的测试配置

MISRA C 2012 已更新并更名为 MISRA C 2023 (MISRA C 2012)。

以下测试配置已根据新规则进行了更新:

  • AUTOSAR C++14 编码指南
  • Flow Analysis Aggressive
  • Flow Analysis Fast
  • Flow Analysis Standard
  • Global Analysis
  • High Integrity C++
  • HIS Source Code Metrics
  • Joint Strike Fighter
  • MISRA C 1998
  • MISRA C 2004
  • MISRA C 2012 > MISRA C 2023 (MISRA C 2012)
  • MISRA C++ 2008
  • Recommended Rules for FDA (C)
  • Recommended Rules for FDA (C++)
  • Recommended Rules
  • SEI CERT C Guidelines
  • SEI CERT C Rules
  • SEI CERT C++ Rules
  • Sutter-Alexandrescu

其他更新

  • 优化在 Eclipse IDE 暗色主题下运行时的外观和感受。 

弃用和删除的支持

删除对团队服务器的支持

已删除在 DTP 2022.1 中弃用的团队服务器。如果您的 C/C++test 团队配置、规则和规则映射仍存储在 DTP 团队服务器中,请将它们迁移到共享位置。请参阅将测试配置、规则和规则映射从团队服务器迁移到共享位置

删除的平台支持

现已删除对以下平台的支持:

  • Windows Server 2016

即将弃用的编译器

在未来的版本中,将不再支持以下编译器:

  • Altium TASKING Vx-toolset for TriCore C/C++ Compiler 6.2
  • Clang 6.0
  • FR Family SOFTUNE C/C++ Compiler V6
  • Green Hills Software Compiler Native v. 5.0
  • Green Hills Software Compiler for ARM64 v. 2014_1.x
  • Green Hills Software Compiler for PPC v. 4.2
  • Green Hills Software Compiler for V850 v. 2014.1.x
  • Microsoft Visual C++ 14.0
  • Microsoft Visual C++ 14.0 (x64)
  • Renesas SH SERIES C/C++ Compiler V.9.04.xx
  • TI MSP430 C/C++ Compiler GNU GCC 6.x
  • TI TMS320C2000 C/C++ Compiler v16.9
  • Wind River GCC 4.8.x

已弃用的编译器

已弃用以下编译器的支持,并将在以后的版本中删除:

  • Altium TASKING C compiler for 80C196 v. 6.0 r1
  • Clang 5.0
  • Freescale C/C++ Compiler v. 5.1 for Embedded ARM
  • Freescale CodeWarrior ANSI-C/cC++ Compiler 5.0.x for HC12
  • Freescale CodeWarrior C/C++ Compiler v. 6.0 for ColdFire
  • Green Hills Software Compiler for ARM v. 2014_1.x
  • Green Hills Software Compiler for PPC v. 4.0.x
  • Green Hills Software Compiler for V850 v. 2013.5.x
  • IAR Compiler for STM8 v. 1.4x

删除的编译器支持

不再支持以下编译器:

  • ARM Clang 6.6
  • ARM GCC 4.5
  • ARM RealView 4.1
  • ARM RealView 4.1 for uVision
  • Altium TASKING Vx-toolset for TriCore C/C++ Compiler 4.0
  • Altium TASKING Vx-toolset for TriCore C/C++ Compiler 6.0
  • Altium TASKING classic compiler for C166/ST10 v. 6.0
  • COSMIC Software 68HC08 C Cross Compiler V4.6.x
  • Clang 3.9
  • Clang 4.0
  • CodeSourcery Sourcery G++ Lite 2009q1-203
  • Embarcadero C++ Compiler 6.2
  • Embarcadero C++ Compiler 6.9
  • GNU GCC 4.0.x (x86)
  • GNU GCC 4.0.x (x86_64)
  • GNU GCC 4.1.x (x86)
  • GNU GCC 4.1.x (x86_64)
  • GNU GCC 4.2.x (x86)
  • GNU GCC 4.2.x (x86_64)
  • GNU GCC 4.3.x (x86)
  • GNU GCC 4.3.x (x86_64)
  • GNU GCC 4.4.x (x86)
  • GNU GCC 4.4.x (x86_64)
  • GNU GCC 4.5.x (x86)
  • GNU GCC 4.5.x (x86_64)
  • GNU GCC 4.6.x (x86)
  • GNU GCC 4.6.x (x86_64)
  • GNU GCC 4.7.x (x86)
  • GNU GCC 4.7.x (x86_64)
  • GNU GCC 4.8.x (x86)
  • GNU GCC 4.8.x (x86_64)
  • GNU GCC 4.9.x (x86)
  • GNU GCC 4.9.x (x86_64)
  • Green Hills Software Compiler Native v. 4.2
  • Green Hills Software Compiler for V850 v. 5.1.x
  • Green Hills Software Compiler for PPC v. 3.5
  • IAR Compiler for ARM v. 6.1x
  • IAR Compiler for ARM v. 6.3x
  • IAR Compiler for ARM v. 6.6x
  • IAR Compiler for ARM v. 6.7x
  • IAR Compiler for MSP430 v. 5.4x
  • Intel(R) C++ Compiler v 18.0
  • Keil C166 7.0
  • Keil C51 8.x
  • Microsoft Visual C++ 11.0
  • Microsoft Visual C++ 11.0 (x64)
  • Microsoft Visual C++ 12.0
  • Microsoft Visual C++ 12.0 (x64)
  • National Instruments LabWindows/CVI 2013 Clang C/C++ Compiler v2.9
  • National Instruments LabWindows/CVI 9.0
  • QNX GCC 4.2.x
  • QNX GCC 4.4.x
  • Renesas M16C/R8C C Compiler 5.4x
  • Renesas RX C/C++ Compiler 2.2x
  • Renesas SH SERIES C/C++ Compiler V.5.1x.x
  • Renesas SH SERIES C/C++ Compiler V.9.03.xx
  • TI ARM C/C++ Compiler v5.1.x
  • TI TMS320C2000 C/C++ Compiler v6.2
  • TI TMS320C6x C/C++ Compiler v7.3

删除的测试配置

已删除以下测试配置:

  • Run Altium TASKING CTC Application with Mem Monitoring - CrossView
  • Run Altium TASKING CTC Tests - CrossView

解决的 Bug 和 FR

Bug/FR ID

说明

CPP-39580

[static] MISRA2012-RULE-5_6 和 MISRA2012-RULE-5_7 规则应为全局规则

CPP-40072

[rulewizard] 增加对 constexpr if 的支持

CPP-42545

[static] CERT-C-FIO41:现有映射过于笼统

CPP-42649

[static] 优化 AUTOSAR A2-10-5、MISRA2008 2-10-5 以及 MISRA C 2012 Rule 5.8 和 5.9 的映射

CPP-43932

[static] HIS 指标 - 路径数(PATH)

CPP-44741

[engine] Constexpr c-tor 要求在非常量表达式上下文中初始化成员

CPP-44752

[static] CODSTA-145 (CERT_C-POS30-c) 可以将由 '\0' 初始化的缓冲区作为例外

CPP-44917

[static] 优化 CERT MEM02 的映射

CPP-45439

[static] AUTOSAR-A2_10_5_a 不应检查静态局部变量

CPP-46011

[static] 优化 CERT-ERR33 和 CERT-POS54 的映射

CPP-46408

[static] CERT_C-CON33-a:查看 SECURITY-25 规则中的函数列表

CPP-47128

[static] MISRAC2012-RULE_5_9-a 对没有链接的对象报告不正确的违规信息

CPP-47470

[static] CODSTA-127 和 CODSTA-127_b 可以扩展以检测数组类型到整数类型的转换

CPP-47508

[static] MISRA2008-5_0_10 规则不遵循 MISRA C++ Rule 5-0-10 的例外

CPP-47804

[static] CODSTA-203 不应检测 std::cout 中使用的字符串

CPP-47863

[engine] 指定初始化器中的类型转换重构不正确

CPP-48197

[static] 优化 AUTOSAR A8-4-7 的映射

CPP-49197

[static] 优化 OOP-48 (AUTOSAR-M11_0_1-a) 中 POD 的定义

CPP-49771

[static] 优化 AUTOSAR A5-2-2 的映射

CPP-49849

[static] AUTOSAR A3-9-1:考虑不报告用于字符的纯字符类型

CPP-49917

[static] 应优化 CERT_C-EXP36 的映射

CPP-50105

[static] 在 AUTOSAR A2-3-1 中显示未定义的字符

CPP-50174

[static] 优化 CERT_C-POS44 的映射

CPP-51175

[engine] 因 edg.implicit_typename_enabled=true 导致解析错误

CPP-51288

[engine] 错误:不允许使用限定名称

CPP-51304

[engine] cpptestcc 错误:没有重载函数 "vfc::slerp" 的实例与参数列表匹配

CPP-51452

[rulewizard] _Static_assert 中的表达式应被静态分析规则检测

CPP-51594

[compiler] 支持 GNU GCC 10 aarch32/arm

CPP-51687

[static] GLOBAL-UNUSEDTYPE (MISRA2008-0_1_5) 针对使用的别名产生误报

CPP-51753

[compiler] 支持 WindRiver Clang/ARM 9.0.1 和 VxWorks 7.0 SR 640 for Linux(扩展)

CPP-51767

[static] MISRA2004-11_3_a (AUTOSAR-M5_2_9-a) 应将 uintptr_t 和 intptr_t 类型视作例外。

CPP-51773

[compiler] 支持 GNU GCC 11 aarch32/arm

CPP-51843

[compiler] 静态 asm 过程和 'rvct_5_0_uV' 发生解析错误

CPP-51853

[static] MISRA2004-8_7 (AUTOSAR-M3_4_1-b) 在模板函数中使用变量时误报

CPP-51854

[static] EXCEPT-17 (AUTOSAR-M15_3_6-a) 对嵌套 try-catch 块误报

CPP-52158

[engine] CWC 内部错误:断言失败: "exprutil.c", line 17859 in alloc_expr_ctor_dynamic_init

CPP-52163

[compiler] 使用 TASKING-6.3 处理 '_packed_' 属性时发生解析错误

CPP-52185

[static] BD-PB-UCMETH 规则应添加到 MISRAC2012-RULE_2_1 的映射中

CPP-52188

[static] 优化 CERT_C-EXP20 的映射

CPP-52196

[static] 当指针是逻辑运算符的操作数时,MISRAC2012-RULE_10_1-a (CODSTA-161_a) 应检测到该情况

CPP-52212

[engine] 插桩错误:模板化类的 final 修饰符未重建

CPP-52222

[ide] 传递给由 C++test Professional 启动的 C++test Engine(标准版)的 build.id 值应使用会话开始时间计算,而不是当前时间

CPP-52242

[static] 优化 CERT-MSC07_C 和 CERT-MSC12_C 的映射

CPP-52250

[engine] CRTP C++ 技术插桩失败

CPP-52260

[engine] 无法为模板类特化的类体外部模板方法定义收集覆盖率。

CPP-52264

[static] PB-69 报告 python 错误

CPP-52266

[static] CODSTA-CPP-92 (MISRA2008-10_2_1) 对赋值运算符误报

CPP-52274

[rulewizard] Typedefs 用于调用构造函数时不可见

CPP-52302

[compiler] 在不应评估 iccarm 响应文件中 Windows 风格路径的情况下对其进行评估

CPP-52322

[static] 优化 CERT-C INT10 的映射

CPP-52338

[static] GLOBAL-UNUSEDTYPE (MISRA2008-0_1_5) 在实际使用别名时误报

CPP-52344

[static] MISRA2008-2_10_6_a (CODSTA-CPP-87_a) 误报:规则报告类名与其构造函数名之间的标识符存在冲突

CPP-52345

[static] CERT_CPP-DCL60-a (GLOBAL-UNIQUETYPE) 误报:报告类与其构造函数同名

CPP-52351

[engine] 错误:表达式必须具有常量值

CPP-52372

[complier] 支持 Hexagon 8.6(Linux,扩展,完整版)

CPP-52384

[rulewizard] using 声明无法看到模板基类的 entity->MemberFunction

CPP-52385

[rulewizard] 推导指南不应被检测为函数定义

CPP-52386

[engine] 将 enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang 添加到 clang 编译器的可识别选项中

CPP-52416

[static] 行抑制不一致

CPP-52483

[docs] 文档 CPPTEST_MULTI_PROCESSES_LOG 配置宏

CPP-52515

[static] OPT-32_b (MISRA2008-0_1_8_b) 对仅包含 static_assert 表达式的模板函数误报

CPP-52521

[engine] 插桩不正确

CPP-52530

[static] GLOBAL-UNUSEDTYPE (MISRA2008-0_1_5) 对仅用作模板参数的局部结构的误报

CPP-52538

[rulewizard] 模板实例中 _Static_assert 的表达式应通过静态分析规则检测

CPP-52544

[static] 拆分 CODSTA-CPP-53 (AUTOSAR-A7_1_1-a) 规则(单独检查参数)

CPP-52558

[engine] 错误:未捕获 'key_only'

CPP-52577

[static] NAMING-47 (MISRA2008-2_10_1) 在标识符的特定字符组合存在差异时不会报告

CPP-52578

[static] OPT-03 (AUTOSAR-A0_1_4-a) 在参数仅用于 decltype() 时误报

CPP-52581

[static] CODSTA-26 (HICPP-5_1_1-a) 对模板中使用的 const/constexpr 的初始化器的硬编码值误报

CPP-52593

[static] MISRA2004-16_8 (AUTOSAR-A8_4_2-a) 对 'if constexpr' 中包含 'return' 的函数误报

CPP-52599

[engine] Error[Pe265]: member "A::c_numberOfA" (在第 19 行声明) 不可访问

CPP-52602

[static] MISRA2004-17_5 (MISRAC2012-RULE_18_5-a) 对函数参数中指向数组的指针误报

CPP-52603

[static] MISRA2004-16_7 (MISRAC2012-RULE_8_13-a) 对指向数组类型的指针误报

CPP-52623

[static] CODSTA-CPP-78 (MISRA2008-9_3_3) 在函数在 'if constexpr' 中包含非静态代码时误报

CPP-52625

[static] CODSTA-81 (MISRA2008-3_3_2) 在间接未命名命名空间中声明函数时误报

CPP-52648

[rulewizard] decltype() 中的表达式应通过静态分析规则检测

CPP-52656

[static] MISRA2004-14_3 (AUTOSAR-M6_2_3-a) 在 [[fallthrough]] 属性与 null 语句位于同一行时进行报告

CPP-52659

[static] MISRA2004-17_6_a (AUTOSAR-A3_8_1-b) 在返回 for-range 元素地址时误报

CPP-52669

[static] 运行规则 'INTERNAL-METRICS-METHODS2 时出错

CPP-52674

[engine] 在没有捕获的情况下,lambda 中无法使用引用

CPP-52702

[engine] 错误:表达式必须具有常量值

CPP-52736

[static] CODSTA-MCPP-37 (AUTOSAR-A12_1_6-a) 在派生类中的构造函数初始化成员时误报

CPP-52743

[static] INIT-18 (AUTOSAR-A12_1_2-a) 在构造函数中分配静态成员时误报

CPP-52745

[engine] 错误:从 type '__m128i {aka __vector(2) long long int}' 到 type 'cv_ void_ptr {aka const volatile void*}' 的类型转换无效

CPP-52760

[static] MISRA2008-5_2_10 检测非算术运算符

CPP-52769

[engine] 为 aarch64 添加对 __va_list 类型的支持

CPP-52797

[compiler] IAR 编译器的 --utf8_text_in 选项解析不正确

CPP-52819

[static] OOP-07 (AUTOSAR-A10_1_1-a) 无法正确检测接口类

CPP-52825

[engine] 没有函数模板 "f" 的实例与参数列表匹配

CPP-52831

[static] GLOBAL-ONEUSEVAR (MISRA2008-0_1_4) 在变量用于模板中的 static_assert 时误报

CPP-52839

[static] 优化 AUTOSAR A8-4-3 的映射

CPP-52875

[static] 优化 MISRAC2012-RULE-12_2 规则的映射

CPP-52876

[static] GLOBAL-ONEFILEDECL (AUTOSAR-M3_2_3) 对枚举前向声明误报

CPP-52877

[static] Pb-41_b 在使用带有 'std::initializer_list' 的大括号初始化器时误报

CPP-52879

[complier] Clang 10 属性指定的对齐值无效

CPP-52890

[compiler] 错误 C3615:constexpr 函数 'operator new' 无法产生常量表达式

CPP-52892

[static] CODSTA-CPP-103 (AUTOSAR-A8_4_8-a) 在构造函数初始化列表中使用参数时误报

CPP-52977

[static] CODSTA-224 (AUTOSAR-A5_16_1-a) 对模板成员初始化器中使用的条件运算符误报

CPP-52984

[engine] GCC 允许 "weak" 字符串作为 constexpr

CPP-53007

[ide] 通过测试用例编辑器上的“全部折叠”链接更新标题信息

CPP-53070

[static] CODSTA-184 报告 IndexError:列表索引超出范围

CPP-53100

[cli] C/C++test Standard CLI 因跳过部分测试的 GoogleTest 报告崩溃

CPP-53683

[ide] 使用“代码”在测试用例编辑器中编辑“桩函数配置”时出现问题

FA-4985

BD-PB-CC 在条件的值取决于模板参数时对条件误报

FA-9225

BD-PB-VOVR 的“存在至少一条路径...时报告”的参数行为与描述不符

FA-9261

BD-PB-CC 在为进行相等性比较而检查超出范围值时漏报

FA-9265

对引用类型的 dynamic_cast 转换失败时,模型错误抛出 'int' 而不是 'std::bad_cast'

FA-9335

在敏感模式下当除数被转换时,BD-PB-ZERO 误报

FA-9368

BD-PB-NOTINIT 误报

PT-1350未找到命令行功能时,cpptest.license.wait.for.tokens.time 不会等待
PT-1704[VS] Visual Studio 插件中没有代理支持
PT-1727

“开始停用,空闲时自动释放”不生效

XT-41092规则链接的相对路径解析为绝对路径会导致报告和规则文档不可移植 
CPP-52820*[engine] 插桩错误:表达式必须具有常数值插桩失败
CPP-53718*[engine] constexpr __builtin_strcmp/__builtin_memcmp 导致内存缓冲区溢出
CPP-53785*[static] OPT-43:IndexError:字符串索引超出范围
XT-41178*支持 Gitlab SAST v.15 报告格式

*在 C/C++test 2023.1.1 或更新版本中提供

规则更新

新增规则

规则 ID

标题

APSC_DV-002590-l

避免有符号整数溢出

AUTOSAR-A2_10_5-c

定义具有内部链接的对象的标识符应是唯一的

AUTOSAR-A2_10_5-d

定义具有内部链接的函数的标识符应是唯一的

AUTOSAR-A3_9_1-c

应该使用 typedef 替代普通 char 类型

AUTOSAR-A4_7_1-i

避免在整数类型之间转换时的数据丢失

AUTOSAR-A4_7_1-j

避免有符号整数溢出

AUTOSAR-A4_7_1-k

避免在整数类型之间转换时的数值变化

AUTOSAR-A7_1_1-b

尽可能将参数声明为 const

AUTOSAR-M0_1_3-d

项目不应包含具有外部链接的未使用变量

AUTOSAR-M0_1_3-e

项目不应包含具有内部链接的未使用变量

BD-PB-INTDL

避免在整数类型之间转换时的数据丢失

BD-PB-INTUB

避免有符号整数溢出

BD-PB-INTVC

避免在整数类型之间转换时的数值变化

BD-PB-INTWRAP

避免在进行整数运算时的回绕

BD-PB-NOTINITAT

原子对象在被访问前应被正确初始化

BD-TRS-THRDR

线程之间不应存在数据争用

BD-TRS-THRDSTR

线程同步对象不应该被线程销毁

BD-TRS-THRINIT

线程同步对象不应该被线程初始化

BD-TRS-THRTHR

一个线程不应该由另一个线程创建

BD-TRS-THRTSS

线程专有存储不应该由线程创建

BD-TRS-TIMEDLOCK

标准库函数 mtx_timedlock() 不得在不支持超时的互斥锁上调用

CERT_C-DCL00-b

尽可能将参数声明为 const

CERT_C-EXP20-b

测试一个值是否为零应该是显式的,除非操作数实际上是布尔值

CERT_C-INT08-b

避免有符号整数溢出

CERT_C-INT08-c

避免在整数类型之间转换时的数值变化

CERT_C-INT08-d

避免在进行整数运算时的回绕

CERT_C-INT31-p

避免在整数类型之间转换时的数值变化

CERT_C-MSC07-i

避免无法到达的方法

CERT_C-MSC12-i

避免无法到达的方法

CERT_C-MSC12-j

避免始终计算为相同值的条件

CERT_C-MSC12-k

所有非 null 语句无论如何执行都至少有一个副作用,或者导致控制流发生变化

CODSTA-112_b

不应使用指向可变修改数组类型的指针

CODSTA-220_b

不应使用最小宽度的整数常量宏的小整数变体

CODSTA-223_b

应该使用 typedef 替代普通 char 类型

CODSTA-226_a

应使用可能返回错误的标准库函数返回的值

CODSTA-226_b

不需要检查返回值的标准库函数应该被转换为 'void'

CODSTA-227

应使用可能返回错误的 POSIX 库函数所返回的值

CODSTA-228_a

不要使用含有赋值、增量或减量运算符的流参数调用 'getc()'、'putc()'、'getwc()' 或 'putwc()'

CODSTA-228_b

不要使用包含函数调用或类似函数的宏调用的流参数调用 'getc()'、'putc()'、'getwc()' 或 'putwc()'

CODSTA-229

余数运算符 '%' 的操作数应为无符号的整数类型

CODSTA-230

不要将指针转换为更严格对齐的指针类型

CODSTA-231

不要将具有线程存储期的对象的地址分配给具有静态存储期的对象

CODSTA-232

在表达式中,增量(++)和减量(--)运算符不应该与算术运算符混合使用

CODSTA-301

转换不得删除指针指向的类型中的任何 'const'、'volatile' 或 '_Atomic' 限定

CODSTA-302

移位运算符的右操作数应介于零和一之间,小于左操作数的基本类型或基础类型的位宽

CODSTA-CPP-108

对于‘复制成本低’的类型,const 引用的参数应按值传递

CODSTA-CPP-108_b

通过值传递具有平凡复制构造函数的小对象

CODSTA-CPP-109

对于非‘复制成本低’的类型,参数应该通过引用传递

CODSTA-CPP-53_b

尽可能将参数声明为 const

CODSTA-MC-101

线程对象、线程同步对象和线程特有存储指针不应具有自动存储期

CODSTA-MC-16

'_Atomic' 限定符不应与 'void' 类型一起使用

CODSTA-MC-17

结构和联合类型的原子对象的成员不应直接访问

CODSTA-MC-18

转换时不得从指针类型中删除任何 '_Atomic' 限定

CODSTA-MC-19

原子类型的表达式的值应独立于线程交错

CODSTA-MC-20

仅使用 'memory_order_seq_cst' 作为显式内存顺序参数

CODSTA-MC-21

传递给 'mtx_init()' 函数的第二个参数应为 'mtx_plain'、'mtx_timed'、'mtx_plain | mtx_recursive' 或 'mtx_timed | mtx_recursive'

CODSTA-MC-22

线程对象、线程同步对象和线程特有存储指针只能由相应的标准库函数访问

CWE-190-h

避免有符号整数溢出

GLOBAL-REUSEDEXTFUN

定义具有外部链接的函数的标识符应为唯一标识符

GLOBAL-REUSEDEXTVAR

定义具有外部链接的对象的标识符应为唯一标识符

GLOBAL-REUSEDSTATFUN

定义具有内部链接的函数的标识符应是唯一的

GLOBAL-REUSEDSTATVAR

定义具有内部链接的对象的标识符应是唯一的

GLOBAL-UNIQUETYPEC

标签名称应为唯一标识符

GLOBAL-UNIQUETYPEDEFC

typedef 名称应为唯一标识符

GLOBAL-UNUSEDEXTVAR

项目不应包含具有外部链接的未使用变量

HICPP-4_2_2-g

避免在整数类型之间转换时的数据丢失

HICPP-4_2_2-h

避免有符号整数溢出

HICPP-4_2_2-i

避免在整数类型之间转换时的数值变化

HICPP-7_1_2-b

尽可能将参数声明为 const

METRICS-44

函数中的执行路径数不应大于 80

MISRA2008-0_1_3_d

项目不应包含具有外部链接的未使用变量

MISRA2008-0_1_3_e

项目不应包含具有内部链接的未使用变量

MISRA2008-2_10_5_c

非成员对象或具有静态存储期的函数的标识符名称不得被重复使用

MISRA2008-2_10_5_d

非成员对象或具有静态存储期的函数的标识符名称不得被重复使用

MISRA2008-7_1_1_b

尽可能将参数声明为 const

MISRA2012-DIR-4_1_l

避免有符号整数溢出

MISRA2012-DIR-4_1_m

避免在整数类型之间转换时的数据丢失

MISRA2012-DIR-5_1

不要使用具有不同的锁集的全局变量

MISRA2012-DIR-5_1_b

变量应该在单个关键部分的上下文中使用

MISRA2012-DIR-5_1_c

线程之间不应存在数据争用

MISRA2012-DIR-5_2

不要以不同的顺序获取锁

MISRA2012-DIR-5_3

一个线程不应该由另一个线程创建

MISRA2012-RULE-11_10

_Atomic 限定符不应应用于不完整的类型 void

MISRA2012-RULE-12_2_b

移位运算符的右操作数应介于零和一之间,小于左操作数的基本类型或基础类型的位宽

MISRA2012-RULE-12_6

原子对象的结构体和联合体成员不得直接访问

MISRA2012-RULE-13_2_h

原子类型的表达式的值应独立于线程交错

MISRA2012-RULE-18_10

不应使用指向可变修改数组类型的指针

MISRA2012-RULE-18_6_c

不要将具有线程存储期的对象的地址分配给具有静态存储期的对象

MISRA2012-RULE-21_25

仅使用 'memory_order_seq_cst' 作为显式内存顺序参数

MISRA2012-RULE-21_26

标准库函数 mtx_timedlock() 不得在不支持超时的互斥锁上调用

MISRA2012-RULE-22_11

不要链接或分离以前连接或分离的线程

MISRA2012-RULE-22_12

线程对象、线程同步对象和线程特有存储指针只能由相应的标准库函数访问

MISRA2012-RULE-22_13

线程对象、线程同步对象和线程特有存储指针不应具有自动存储期

MISRA2012-RULE-22_14_a

线程同步对象不应该被线程初始化

MISRA2012-RULE-22_14_b

传递给 'mtx_init()' 函数的第二个参数应为 'mtx_plain'、'mtx_timed'、'mtx_plain | mtx_recursive' 或 'mtx_timed | mtx_recursive'

MISRA2012-RULE-22_15

线程同步对象不应该被线程销毁

MISRA2012-RULE-22_16

不要抛弃未释放的锁

MISRA2012-RULE-22_17

不释放尚未获得的锁

MISRA2012-RULE-22_18

避免双重锁定

MISRA2012-RULE-22_19

一个条件变量至多与一个 mutex 变量相关联

MISRA2012-RULE-22_20

线程专有存储不应该由线程创建

MISRA2012-RULE-2_1_h

避免无法到达的方法

MISRA2012-RULE-2_8_a

项目不应包含具有外部链接的未使用变量

MISRA2012-RULE-2_8_b

项目不应包含具有内部链接的未使用变量

MISRA2012-RULE-2_8_c

避免未使用的局部变量

MISRA2012-RULE-5_8_b

定义具有外部链接的函数的标识符应为唯一标识符

MISRA2012-RULE-7_6

不应使用最小宽度的整数常量宏的小整数变体

MISRA2012-RULE-9_6

使用链式指示符的初始化器不应包含没有指示符的初始化器

MISRA2012-RULE-9_7

原子对象在被访问前应被正确初始化

MISRAC2012-DIR_4_1-l

避免有符号整数溢出

MISRAC2012-DIR_4_1-m

避免在整数类型之间转换时的数据丢失

MISRAC2012-DIR_5_1-a

不要使用具有不同的锁集的全局变量

MISRAC2012-DIR_5_1-b

变量应该在单个关键部分的上下文中使用

MISRAC2012-DIR_5_1-c

线程之间不应存在数据争用

MISRAC2012-DIR_5_2-a

不要以不同的顺序获取锁

MISRAC2012-DIR_5_3-a

一个线程不应该由另一个线程创建

MISRAC2012-RULE_11_10-a

'_Atomic' 限定符不应与 'void' 类型一起使用

MISRAC2012-RULE_12_2-b

移位运算符的右操作数应介于零和一之间,小于左操作数的基本类型或基础类型的位宽

MISRAC2012-RULE_12_6-a

结构和联合类型的原子对象的成员不应直接访问

MISRAC2012-RULE_13_2-h

原子类型的表达式的值应独立于线程交错

MISRAC2012-RULE_18_10-a

不应使用指向可变修改数组类型的指针

MISRAC2012-RULE_18_6-c

不要将具有线程存储期的对象的地址分配给具有静态存储期的对象

MISRAC2012-RULE_21_25-a

仅使用 'memory_order_seq_cst' 作为显式内存顺序参数

MISRAC2012-RULE_21_26-a

标准库函数 mtx_timedlock() 不得在不支持超时的互斥锁上调用

MISRAC2012-RULE_22_11-a

不要链接或分离以前连接或分离的线程

MISRAC2012-RULE_22_12-a

线程对象、线程同步对象和线程特有存储指针只能由相应的标准库函数访问

MISRAC2012-RULE_22_13-a

线程对象、线程同步对象和线程特有存储指针不应具有自动存储期

MISRAC2012-RULE_22_14-a

线程同步对象不应该被线程初始化

MISRAC2012-RULE_22_14-b

传递给 'mtx_init()' 函数的第二个参数应为 'mtx_plain'、'mtx_timed'、'mtx_plain | mtx_recursive' 或 'mtx_timed | mtx_recursive'

MISRAC2012-RULE_22_15-a

线程同步对象不应该被线程销毁

MISRAC2012-RULE_22_16-a

不要抛弃未释放的锁

MISRAC2012-RULE_22_17-a

不释放尚未获得的锁

MISRAC2012-RULE_22_18-a

避免双重锁定

MISRAC2012-RULE_22_19-a

在条件变量上的并行等待操作不应使用多个 mutex

MISRAC2012-RULE_22_20-a

线程专有存储不应该由线程创建

MISRAC2012-RULE_2_1-h

避免无法到达的方法

MISRAC2012-RULE_2_8-a

项目不应包含具有外部链接的未使用变量

MISRAC2012-RULE_2_8-b

项目不应包含具有内部链接的未使用变量

MISRAC2012-RULE_2_8-c

避免未使用的局部变量

MISRAC2012-RULE_5_8-b

定义具有外部链接的函数的标识符应为唯一标识符

MISRAC2012-RULE_7_6-a

不应使用最小宽度的整数常量宏的小整数变体

MISRAC2012-RULE_9_6-a

使用链式指示符的初始化器不应包含没有指示符的初始化器

MISRAC2012-RULE_9_7-a

原子对象在被访问前应被正确初始化

MRM-58_a

内存分配函数的结果应被立即转换

MRM-58_b

内存分配函数的结果应该立即被转换为指向被分配类型的指针

OOP-07_c

确保派生类最多具有一个不是接口类的基类

OPT-43

项目不应包含具有内部链接的未使用变量

PB-80

使用链式指示符的初始化器不应包含没有指示符的初始化器

SECURITY-53

不应使用 'pthread_kill'、'pthread_sigqueue' 和 'tgkill' 函数向线程发送信号

更新规则

类别 ID

规则 ID

DISA ASD STI

APSC_DV-001995-e, APSC_DV-001995-f, APSC_DV-002000-a, APSC_DV-002400-d, APSC_DV-002590-e, APSC_DV-003110-a

AUTOSAR C++14 编码指南

AUTOSAR-A0_1_1-a, AUTOSAR-A0_1_6-a, AUTOSAR-A10_1_1-a, AUTOSAR-A12_1_2-a, AUTOSAR-A12_1_6-a, AUTOSAR-A12_8_3-a, AUTOSAR-A15_0_2-a, AUTOSAR-A15_1_4-a, AUTOSAR-A15_5_3-j, AUTOSAR-A2_10_4-a, AUTOSAR-A2_10_4-b, AUTOSAR-A2_10_5-a, AUTOSAR-A2_10_5-b, AUTOSAR-A2_3_1-a, AUTOSAR-A3_8_1-a, AUTOSAR-A3_8_1-b, AUTOSAR-A3_9_1-b, AUTOSAR-A4_7_1-h, AUTOSAR-A5_0_3-a, AUTOSAR-A5_16_1-a, AUTOSAR-A5_1_1-a, AUTOSAR-A5_2_2-a, AUTOSAR-A5_2_3-a, AUTOSAR-A5_3_2-a, AUTOSAR-A5_6_1-a, AUTOSAR-A7_1_1-a, AUTOSAR-A7_3_1-a, AUTOSAR-A8_4_2-a, AUTOSAR-A8_4_3-a, AUTOSAR-A8_4_7-a, AUTOSAR-A8_4_8-a, AUTOSAR-A8_5_0-a, AUTOSAR-M0_1_2-ac, AUTOSAR-M0_1_4-a, AUTOSAR-M0_3_1-e, AUTOSAR-M0_3_1-f, AUTOSAR-M10_2_1-a, AUTOSAR-M11_0_1-a, AUTOSAR-M15_3_6-a, AUTOSAR-M2_10_1-a, AUTOSAR-M3_2_3-a, AUTOSAR-M3_3_2-a, AUTOSAR-M3_4_1-b, AUTOSAR-M5_0_10-a, AUTOSAR-M5_2_10-a, AUTOSAR-M5_2_9-a, AUTOSAR-M6_2_3-a, AUTOSAR-M6_4_1-a, AUTOSAR-M7_1_2-b, AUTOSAR-M7_5_1-a

流分析

BD-PB-BADSHIFT , BD-PB-CC, BD-PB-EXCEPT, BD-PB-NOTINIT, BD-PB-NP, BD-PB-SUBSEQMOVE, BD-PB-UCMETH , BD-PB-VOVR, BD-PB-ZERO, BD-RES-FREE, BD-RES-LEAKS, BD-TRS-MLOCK, BD-TRS-REVLOCK

SEI CERT C

CERT_C-CON30-a, CERT_C-CON31-b, CERT_C-CON33-a, CERT_C-CON43-a, CERT_C-DCL00-a, CERT_C-DCL13-a, CERT_C-DCL22-a, CERT_C-DCL30-a, CERT_C-ERR33-a, CERT_C-ERR33-b, CERT_C-EXP05-a, CERT_C-EXP32-a, CERT_C-EXP33-a, CERT_C-EXP34-a, CERT_C-EXP36-a, CERT_C-EXP40-a, CERT_C-FIO22-a, CERT_C-FIO41-a, CERT_C-FIO41-b, CERT_C-FIO42-a, CERT_C-FIO46-a, CERT_C-FLP03-a, CERT_C-INT08-a, CERT_C-INT10-a, CERT_C-INT30-a, CERT_C-INT31-a, CERT_C-INT31-o, CERT_C-INT32-a, CERT_C-INT33-a, CERT_C-INT34-a, CERT_C-INT36-b, CERT_C-MEM00-d, CERT_C-MEM00-e, CERT_C-MEM01-a, CERT_C-MEM02-a, CERT_C-MEM02-b, CERT_C-MEM12-a, CERT_C-MEM30-a, CERT_C-MEM31-a, CERT_C-MSC09-a, CERT_C-MSC19-b, CERT_C-MSC37-a, CERT_C-MSC41-a, CERT_C-POS30-c, CERT_C-POS44-a, CERT_C-POS48-b, CERT_C-POS53-a, CERT_C-POS54-a, CERT_C-WIN30-a

SEI CERT C++

CERT_CPP-DCL57-b, CERT_CPP-DCL60-a, CERT_CPP-ERR50-j, CERT_CPP-ERR51-a, CERT_CPP-ERR54-a, CERT_CPP-ERR56-a, CERT_CPP-ERR57-a, CERT_CPP-EXP53-a, CERT_CPP-EXP54-a, CERT_CPP-EXP54-b, CERT_CPP-EXP55-a, CERT_CPP-EXP63-a, CERT_CPP-FIO51-a, CERT_CPP-MEM50-a, CERT_CPP-MSC52-a, CERT_CPP-STR51-a

编码规范

CODSTA-112, CODSTA-126, CODSTA-127, CODSTA-127_b, CODSTA-145, CODSTA-161_a, CODSTA-184, CODSTA-203, CODSTA-223, CODSTA-224, CODSTA-26, CODSTA-81

C++ 编码规范

CODSTA-CPP-103, CODSTA-CPP-11, CODSTA-CPP-53, CODSTA-CPP-92

Modern C++ 编码规范

CODSTA-MCPP-37

常见缺陷列表

CWE-190-a, CWE-362-e, CWE-401-a, CWE-415-a, CWE-416-a, CWE-476-a, CWE-704-d, CWE-704-e, CWE-772-a, CWE-798-a

异常

EXCEPT-17

全局静态分析

GLOBAL-CONDMUTEXVAR, GLOBAL-ONEDEFTYPE, GLOBAL-ONEFILEDECL, GLOBAL-ONEUSEVAR, GLOBAL-REUSEDQUALGLOBVAR, GLOBAL-REUSEDQUALSTATFUN, GLOBAL-UNIQUETYPE, GLOBAL-UNIQUETYPEDEF, GLOBAL-UNUSEDTYPE

High Integrity C++

HICPP-10_3_1-a, HICPP-13_1_1-a, HICPP-15_3_2-a, HICPP-18_2_2-a, HICPP-1_2_1-h, HICPP-1_2_1-i, HICPP-2_4_1-a, HICPP-3_4_1-a, HICPP-4_1_1-b, HICPP-4_2_2-e, HICPP-4_2_2-f, HICPP-5_1_1-a, HICPP-5_2_1-c, HICPP-5_4_1-a, HICPP-5_4_1-c, HICPP-5_5_1-a, HICPP-5_8_1-a, HICPP-6_1_1-b, HICPP-6_3_2-a, HICPP-7_1_2-a, HICPP-7_4_2-c, HICPP-7_4_3-a, HICPP-8_4_1-a, HICPP-8_4_1-b

初始化

INIT-18

联合攻击战斗机

JSF-009, JSF-059_b, JSF-097_d, JSF-111, JSF-114, JSF-118, JSF-136_a, JSF-151, JSF-164, JSF-170

MISRA C 1998

MISRA-005, MISRA-083

MISRA C 2004

MISRA2004-10_5, MISRA2004-11_3_a, MISRA2004-11_3_b, MISRA2004-11_5, MISRA2004-14_3, MISRA2004-14_9, MISRA2004-16_7, MISRA2004-16_8, MISRA2004-16_8_b, MISRA2004-17_5, MISRA2004-17_6_a, MISRA2004-8_7

MISRA C++ 2008

MISRA2008-0_1_2_aa, MISRA2008-0_1_4, MISRA2008-0_1_5, MISRA2008-0_1_6, MISRA2008-0_3_1_b, MISRA2008-0_3_1_c, MISRA2008-10_2_1, MISRA2008-11_0_1, MISRA2008-15_3_6, MISRA2008-15_5_3_j, MISRA2008-2_10_1, MISRA2008-2_10_3, MISRA2008-2_10_4, MISRA2008-2_10_5_a, MISRA2008-2_10_5_b, MISRA2008-3_2_3, MISRA2008-3_3_2, MISRA2008-3_4_1_b, MISRA2008-5_0_10, MISRA2008-5_0_19, MISRA2008-5_2_10, MISRA2008-5_2_5, MISRA2008-5_2_9, MISRA2008-6_2_3, MISRA2008-6_4_1, MISRA2008-7_1_1, MISRA2008-7_1_2_a, MISRA2008-7_5_1, MISRA2008-7_5_2_a, MISRA2008-8_4_3

MISRA C 2012(遗留)

MISRA2012-DIR-4_13_a, MISRA2012-DIR-4_13_b, MISRA2012-DIR-4_13_f, MISRA2012-DIR-4_1_b, MISRA2012-DIR-4_1_c, MISRA2012-DIR-4_1_k, MISRA2012-RULE-10_1_a, MISRA2012-RULE-11_3, MISRA2012-RULE-11_4, MISRA2012-RULE-11_8, MISRA2012-RULE-12_2, MISRA2012-RULE-14_3_zc, MISRA2012-RULE-15_6_b, MISRA2012-RULE-17_4, MISRA2012-RULE-17_4_b, MISRA2012-RULE-18_5, MISRA2012-RULE-18_6_a, MISRA2012-RULE-18_8, MISRA2012-RULE-1_3_a, MISRA2012-RULE-1_3_b, MISRA2012-RULE-1_3_c, MISRA2012-RULE-1_3_m, MISRA2012-RULE-21_16, MISRA2012-RULE-22_1, MISRA2012-RULE-22_2_a, MISRA2012-RULE-22_6, MISRA2012-RULE-2_2_b, MISRA2012-RULE-5_6_a, MISRA2012-RULE-5_7_a, MISRA2012-RULE-5_8, MISRA2012-RULE-5_9_a, MISRA2012-RULE-5_9_b, MISRA2012-RULE-8_13_a, MISRA2012-RULE-8_9, MISRA2012-RULE-9_1, MISRA2012-RULE-9_4

MISRA C 2023 (MISRA C 2012)

MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_1-c, MISRAC2012-DIR_4_1-k, MISRAC2012-DIR_4_13-a, MISRAC2012-DIR_4_13-b, MISRAC2012-DIR_4_13-f, MISRAC2012-RULE_10_1-a, MISRAC2012-RULE_11_3-a, MISRAC2012-RULE_11_4-a, MISRAC2012-RULE_11_8-a, MISRAC2012-RULE_12_2-a, MISRAC2012-RULE_14_3-ac, MISRAC2012-RULE_15_6-b, MISRAC2012-RULE_17_4-a, MISRAC2012-RULE_17_4-b, MISRAC2012-RULE_18_5-a, MISRAC2012-RULE_18_6-a, MISRAC2012-RULE_18_8-a, MISRAC2012-RULE_1_3-a, MISRAC2012-RULE_1_3-b, MISRAC2012-RULE_1_3-c, MISRAC2012-RULE_1_3-m, MISRAC2012-RULE_21_16-a, MISRAC2012-RULE_22_1-a, MISRAC2012-RULE_22_2-a, MISRAC2012-RULE_22_6-a, MISRAC2012-RULE_2_2-b, MISRAC2012-RULE_5_6-a, MISRAC2012-RULE_5_7-a, MISRAC2012-RULE_5_8-a, MISRAC2012-RULE_5_9-a, MISRAC2012-RULE_5_9-b, MISRAC2012-RULE_8_13-a, MISRAC2012-RULE_8_9-a, MISRAC2012-RULE_9_1-a, MISRAC2012-RULE_9_4-a

MISRA C++ 202X

MISRACPP202X-0090-a, MISRACPP202X-0097-a, MISRACPP202X-0110-b, MISRACPP202X-0150-a, MISRACPP202X-0152-a, MISRACPP202X-0280-b

命名规范

NAMING-20, NAMING-47

面向对象

OOP-07, OOP-48

OWASP Top 10 2017

OWASP2017-A6-a

OWASP Top 10 2019

OWASP2019-API4-b, OWASP2019-API7-b

OWASP Top 10 2021

OWASP2021-A5-a

潜在的缺陷

PB-41_b, PB-69

安全性

SECURITY-25

STL 最佳实践

STL-31, STL-34, STL-35

删除规则

规则 ID

注意

AUTOSAR-A8_4_7-b

从 AUTOSAR C++ 14 配置中删除 - 替换为 AUTOSAR-A8_4_7-a。

CERT_C-ERR33-c

从 CERT C 配置中删除。对于其他配置,可以使用 BD-PB-NP 作为替代。

CERT_C-FIO41-c

从 CERT C 配置中删除。对于其他配置,可以使用 MISRA2004-12_2_c 作为替代。

CERT_C-FIO41-d

从 CERT C 配置中删除。对于其他配置,可以使用 MISRA2004-12_2_d 作为替代。

CERT_C-FIO41-e

从 CERT C 配置中删除。对于其他配置,可以使用 CODSTA-123 作为替代。

CERT_C-POS54-b

从 CERT C 配置中删除。对于其他配置,可以使用 CODSTA-122_b 作为替代。

CERT_C-POS54-c

从 CERT C 配置中删除。对于其他配置,可以使用 BD-PB-NP 作为替代。

CODSTA-180

可以使用 GLOBAL-REUSEDEXTVAR、GLOBAL-REUSEDEXTFUN 作为代替。

HICPP-8_2_3-b

从高完整性 C++ 配置中删除 - 替换为 HICPP-8_2_3-a

MISRA2012-RULE-1_4_d

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-214 作为替代。

MISRA2012-RULE-1_4_e

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-209 作为替代。

MISRA2012-RULE-1_4_f

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-210 作为替代。

MISRA2012-RULE-1_4_g

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-211 作为替代。

MISRA2012-RULE-5_6_b

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 MISRA2004-5_3_b 作为替代。

MISRA2012-RULE-5_7_b

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 MISRA2004-5_4_b 作为替代。

MISRAC2012-RULE_1_4-d

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-214 作为替代

MISRAC2012-RULE_1_4-e

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-209 作为替代。

MISRAC2012-RULE_1_4-f

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-210 作为替代。

MISRAC2012-RULE_1_4-g

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-211 作为替代。

MISRAC2012-RULE_5_6-b

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 MISRA2004-5_3_b 作为替代。

MISRAC2012-RULE_5_7-b

从 MISRA C 2012 配置中删除。对于其他配置,可以使用 MISRA2004-5_4_b 作为替代。

有关此版本的信息,请参阅 https://docs.parasoft.com/display/CPPTESTPROEC20231/Updates+in+2023.1