C和C++静态分析工具PC-lint Plus v1.3.5更新:功能改进(中)

原创|产品更新|编辑:郑恭琳|2020-07-06 10:49:30.743|阅读 138 次

概述:1.3.5版本对PC-lint Plus进行了许多改进。包括:更新了AUTOSAR,MISRA C和MISRA C++,新消息和标志选项,对Visual Studio配置生成器GUI的改进等。

# 31款JAVA开发必备控件和工具 # 企业数字化建设合规无风险[专题]

相关链接:

PC-lint Plus是一种静态分析工具,通过分析C和C ++源代码来发现软件中的缺陷。与编译器一样,PC-lint Plus会解析源代码文件,执行语义分析,并构建一个抽象语法树来表示程序。PC-lint Plus采用各种机制,包括数据流分析,数值跟踪,读写分析,强类型检查,功能语义验证和许多其他技术,来提供对单个文件和整个项目强大而全面的分析。

点击免费试用PC-lint Plus最新版


功能改进

  • PCLP-3218 消息9019更准确地报告出现在an之前的声明#include指令

消息9019(#include之前的符号声明)以前没有报告出现在#include指令之前的声明,如果先前的#include’d文件包含声明。在这种情况下,信息9019将被报告。

  • PCLP-3241 增加了描述参数化抑制处理相关规则的新部分

新的部分“参数化抑制规则”记录了重复/类似参数化抑制选项所涉及的一些时间细节。

  • PCLP-3258 从产品文档中删除不存在的消息2409

消息2409以前从PC-lintPlus中删除,但消息描述仍然出现在产品文档和帮助设施中。这一点已得到纠正。

  • PCLP-3269 改进对MISRA C2012细则11.2的支持

消息9076(cast涉及指向void以外的不完整类型的指针)以前只在cast中涉及的两种类型都是指针时才发出。这导致在指向不完全类型和算术类型的指针之间进行转换的错误否定,现在将被正确诊断。

  • PCLP-3289 更新+FAI的描述

fai标志的描述已经更新,以反映过去对其行为的改进,如以前的修订历史中所记录的那样。

  • PCLP-3303 增加了新的/缺失的CERTC指南

一些新的和缺失的CERTC指南被添加到au-certc.lnt作者文件以及相应的支持表中。新增加的指南有:PRE30-C、EXP11-C、EXP12-C、EXP13-C、EXP14-C、EXP15-C、EXP16-C、EXP19-C、EXP37-C和EXP39-C。

  • PCLP-3311 支持具有printf和scanf语义的非变量函数

非变量函数现在支持-printf和-scanf选项以及printf和scanf语义。这允许例如,printf和scanf语义以及相关的格式字符串检查应用于从变量函数模板实例化的非变量函数,方法是使用具有相应语义选项的函数模板的名称。

  • PCLP-3320 禁止在扩展assert宏期间发布的消息

已经更新了编译器.yaml数据库,使得针对GCC、Clang和Microchip编译器生成的编译器配置现在包括以下抑制:

 -emacro(160 523 505 866,assert)

此选项旨在抑制在GCC最近版本中实现的断言宏扩展期间发出的消息。请注意,这种抑制适用于断言宏的整个扩展,特别是如果提供给断言的参数会引发这些消息之一,则它将在宏的扩展范围内被抑制。可以通过从生成的编译器配置文件中删除这个-emacro选项来恢复以前的行为。

  • PCLP-3341 从积分值转换的实现变形指针的跟踪

值跟踪先前将积分值转换为指针的结果解释为只有当积分值为空指针常量时才产生空指针。虽然它不受C或C++标准的保证,但通常假设(通常但不一定是真的)内存中零指针的积分表示为零。当新标志fnz打开(默认)时,值跟踪将将将等于零的积分值转换为指针的结果视为产生空指针,即使积分值不是空指针常数。如果关闭标志,则前面的行为不变。例如,当+fnz打开并使用-vt_depth=2时,本例:

 void invoke_callback(void(*cb)(unsigned int), unsigned int data) {
cb(data);
 }

 void callback_handler(unsigned int data) {
char* p = (char*)data;
*p = 42;
 }

 int main() {
invoke_callback(callback_handler, 0);
 }

现在将报告:

 warning 413: likely use of null pointer ’p’
*p = 42;
^~
 supplemental 894: during specific walk callback_handler(0)
cb(data);
^
 ...
 supplemental 831: cast from integer yields nullptr
char* p = (char*)data;
^~~~~~~~~~~
 ...
 supplemental 831: argument passing yields 0
invoke_callback(callback_handler, 0);
^
  • PCLP-3359 为了规则5-0-21的目的,考虑移位运算符是按位运算符
  • PCLP-3210 当考虑是否发布消息9130以报告违反规则5-0-21时,移位运算符现在被视为按位运算符。请注意,相反,对于规则5-0-20,移位运算符不被视为按位运算符。
  • PCLP-3368 提高对VisualStudio2019更新16.4的支持

pclp_config.py生成的Visual Studio2019的编译器配置现在包括更多选项,以改进对Visual Studio2019更新16.4中标准库的更改的支持。

  • PCLP-3374 改进了对IAR编译器关键字在生成编译器结构中的支持

使用pclp_config生成的IAR编译器配置现在将包括对以前缺少的编译器特定关键字的更好支持。 对以前错误包含在IAR ARM编译器配置中的关键字的支持已被删除。

  • PCLP-381 当在字符串文本中检测到无效字符编码时,新消息2536发出警告

消息336是在源文件中检测到无效字符编码时报告的,除非问题在字符串文字内。一个不同的错误报告在一个前缀字符串文字内的无效字符编码,但在一个未前缀字符串文字内的无效字符编码没有发出消息。新消息2536报告了这个案例。

  • PCLP-382 添加一节,记录支持的输入文件编码

“安装和配置”一章中的一个新部分指定支持PC-lint Plus处理的输入文件的文件编码。

  • PCLP-3384 当使用pclpvscfg.exe实用程序生成项目合并时,将从cl.exe/I和-I选项生成的包含选项中的相对路径转换为绝对路径

pclpvscfg.exe实用程序生成的配置生成批处理文件现在可以识别具有相对路径的cl.exe/I和-I选项,并将目录转换为绝对路径。若要将此行为应用于其他cl.exe选项,或禁用此行为,请在IMPOSTER_PATH_ARGUMENT_RELATIVE_TO_WORKING_DIR_OPTION_INTRODUCERS中设置环境变量的新行批处理文件可以修改或删除。

  • PCLP-3386 non_custodial参数语义添加描述和示例non_custodial参数语义现在在保管参数语义之后列出,并包括一个新的示例。

在生成Visual Studio编译器函数时,为Visual Studio添加有关C++语言标准编译器选项的注意事项

在创建gcc编译器配置过程中,前面提到了使用pclp_config.py-编译器选项。在创建VisualStudio编译器配置的过程中也提到了它。

  • PCLP-3394 不正确地使用+RW和-rw_asgn更优雅的处理

将空参数传递给+rw或-rw_asgn之前可能会导致所有保留的单词注册和任务,这些选项被忽略。这种对这些选项的误用现在反而导致错误。

  • PCLP-3396 当请求选择时,使用应用程序目录作为默认位置pclp_config.py在pclpvscfg

pclpvscfg.exe实用程序现在在请求选择pclp_config.py时默认显示自己的目录。


更多更新详情请查看后续更新内容详解


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至hey@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
在线咨询
联系我们
TOP
在线客服系统
live chat