C和C ++的静态分析工具PC-lint Plus v1.3更新内容:总体改进(上)

本文描述了C和C ++的静态分析工具PC-lint Plus v1.3更新内容中的总体改进,该部分内容一共分为了三个部分,本文是第一部分。

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

本文描述了在PC-lint Plus v1.3版本中的更新内容之一,总体改进,感兴趣的朋友可以请看下面内容~

PC-lint Plus最新版


总体改进:

  • PCLP-744 打印帮助时显示当前尺寸选项

    现在将在打印帮助时指定大小选项的当前值(通过不带参数、带-help或带-help = -s运行)。

  • PCLP-1344 允许return和goto替换MISRA中的中断开关

    新选项+ misra_interpret(任何允许返回以替换开关中的中断)和+ misra_interpret(任何允许goto替换开关中的中断)抑制消息9042(偏离MISRA开关语法),9077(缺少来自最终开关情况的无条件中断) 和9090(切换情况缺少无条件的中断或抛出)时,切换情况由return或goto语句而不是中断来终止。

  • PCLP-1351 消息9106现在包括完整的MS整数文字后缀

    当为Microsoft整数文字后缀(例如i32)发出消息9106(小写字母后缀)时,消息9106现在将在消息中包含完整的整数文字后缀,而不仅仅是字母部分(例如i32而不是仅i)。

  • PCLP-1944 消息912的更新和澄清

  • 现在,消息912特别报告与二进制运算符有关的类型转换何时将值转换为不同于仅整数提升会选择的类型的值。消息描述已更新,以澄清消息的情况和含义。

    例如,添加一个char和long将产生:

note 912: left operand of binary operator ’+’, originallyof type ’char’ and promoted to type ’int’, will befurther converted to type ’long’ due to usual arithmeticconversions with right operand of promoted type ’long’c + L;~ ^

仅当将操作数转换为整数提升选择的类型时(如添加两个子整数值时),将不再发出该消息。

  • PCLP-2613 改善前移goto的处理

    与前向goto的使用有关的误报率降低了(即在功能中稍后指向标签的goto),尤其是在消息774、838和948方面。

  • PCLP-2005 对消息3701的列表初始化的处理的改进

    消息3701将不再发出以进行std :: initializer_list初始化。仍然会为其他形式的括号列表初始化发布该消息,但是消息文本将明确提到必须将括号删除才能使用位置。

  • PCLP-2107 复合文字的值跟踪

    值跟踪现在将跟踪由复合文字在C中创建的结构的字段,并可以报告释放后在使用块范围复合文字时的情况。

  • PCLP-2215 忽略clang搜索中的框架目录后缀包括macOS上pclp_config的路径

    使用pclp_config生成编译器配置时,不再将macOS上框架搜索路径后列出的(框架目录)后缀解析为路径的一部分。

  • PCLP-2250 改进对链式清理的支持

    如果消息1540和1578调用了另一个清除功能,则它将不再报告清除功能或析构函数执行清除失败。

  • PCLP-2270 消息778不再在静态断言内部发出

    消息778(常量表达式在操作中的值为0)不再在表达式必须为常量的静态声明内发出。

  • PCLP-737 将推论扩展到算术表达式中的变量

    推断变量在算术表达式中的位置,其中涉及加法或减法,例如现在支持+ sizeof(int)<16。请注意,推理中的常量操作数始终支持任意表达式,例如a <10 * 5。

  • PCLP-2418 改进了对IAR编译器的支持

    在pclp_config生成的配置中增加了对其他IAR关键字的支持。在文档中添加了有关为C ++生成配置的注释。

  • PCLP-2461 减少与循环迭代期间被调用函数中if语句条件的含义有关的Value Tracking中的误报

    报告值明显与报告的位置的本地信息相矛盾的误报消息已减少,这些值是由循环内调用函数中的if语句所暗示的隐含影响所致。受影响的情况主要表现为消息613的实例,伴随着两个补充消息,两个补充消息的位置相同,这是指一个if语句在循环中的先前函数调用期间测试所报告的指针的情况。

  • PCLP-2462 考虑通过引用不同类型来使用价值

    消息438和838将不再报告仅通过已转换为其他类型的引用使用该值时未使用该值。

  • PCLP-2470 报告445(索引变量的重用)用于任意级别的嵌套

    现在,消息445报告for索引变量的重用,即使它嵌套在一个或多个内部for语句内。

  • PCLP-2485 向消息9022添加可选的字符串参数

    消息9022(宏定义中的未括号的宏参数)现在具有一个可选的字符串参数,用于报告以下情况:未括号的参数与字符串文字相邻(因此不能被括号)或未括号的部分被包围用逗号分隔。在这种情况下,字符串参数将是与字符串文字相邻或由逗号包围的参数之一。这允许消息支持CERT C建议PRE01-C,该建议允许针对这些情况的异常(通过基于字符串参数的值来禁止显示此消息),同时仍支持MISRA C 2012规则19.10(不支持)。

  • PCLP-2511 改进了对消息1764的结构引用的处理

    消息1764现在认识到,如果通过参数将对非const的引用绑定到结构的字段,则无法将对结构的类型引用的参数作为对const的引用。

  • PCLP-2874 改进了工会的价值跟踪

    对联合的初始化、赋值和活动成员的支持得到了改进,减少了与类型校正和总体初始化状态有关的误报。

  • PCLP-2568 pclp_config提取Microsoft C / C ++编译器宏的值

    自动配置工具pclp_config现在提取已记录的Microsoft C / C ++编译器预定义宏的值。

  • PCLP-2586 减少涉及循环期间读取和写入的变量的“未使用”消息的误报

    在已经嵌套的if语句已被循环读取和写入变量的情况下,涉及消息438和838的误报。

  • PCLP-2587 改进不确定溢出的推断值的无符号加法的计算

    包含至少一个表示为间隔的值的无符号加法,其和在计算中的溢出是不确定的,因此先前可能会产生似乎确实发生了溢出的结果。这最常表现为假阳性774或845。

  • PCLP-2597 消息774的新变量/函数/ maro参数

    现在,消息774将通过相关的变量,函数或宏(如果可用)进行参数化。例如:

void f(int x) {x = 5;if (x) { }}

现在将发出:

info 774: boolean condition for ’if’ always evaluates to ’true’(involving variable ’x’)
  • PCLP-2607 对消息2701的模板处理的改进

    消息2701将不再报告功能模板实例化或不明确的变量模板的特殊化。


想要购买PC-lint Plus正版授权,或了解更多产品信息请点击“咨询在线客服”

850×68.png

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月17日
下一篇 2019年10月17日

相关推荐

发表回复

登录后才能评论