dyl*_*ber 7 c++ gcc static-analysis
我一直在开发一个大型 C++ 程序,但在处理 C 项目时忘记添加常用的编译器标志/警告列表。启用该-fanalyzer标志后,我开始在整个代码中收到来自 GCC 12.2 的大量“警告:使用未初始化值 '<unknown>'”消息。这是我能够在编译器资源管理器中生成的一个单独的示例:
#include <string>
std::string square(int num) {
return std::to_string(num * num);
}
Run Code Online (Sandbox Code Playgroud)
编译器输出:
<source>: In function 'std::string square(int)':
<source>:4:36: warning: use of uninitialized value '<unknown>' [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
4 | return std::to_string(num * num);
| ^
'std::string square(int)': events 1-2
|
| 3 | std::string square(int num) {
| | ^
| | |
| | (1) region created on stack here
| 4 | return std::to_string(num * num);
| | ~
| | |
| | (2) use of uninitialized value '<unknown>' here
|
<source>:4:36: warning: use of uninitialized value '<unknown>' [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
4 | return std::to_string(num * num);
| ^
'std::string square(int)': events 1-2
|
| 3 | std::string square(int num) {
| | ^
| | |
| | (1) region created on stack here
| 4 | return std::to_string(num * num);
| | ~
| | |
| | (2) use of uninitialized value '<unknown>' here
|
Run Code Online (Sandbox Code Playgroud)
这个简单的square功能真的有这样的问题吗?或者我错过了更大的东西?GCC 中的静态分析是否已损坏?
这显然是误报。分析器抱怨任何返回 a std::string(和其他标准库类型)的函数,例如
#include <string>
std::string f() {
return {};
}
Run Code Online (Sandbox Code Playgroud)
以及。(https://godbolt.org/z/oKrfrbn5o)
令人惊讶的是,我找不到任何以前关于这个看似明显的问题的错误报告。然而,@JasonLiam 已在这里提交了一份文件。
-Wanalyzer-use-of-uninitialized-value也是一个相对较新的功能,是在 GCC 12 中添加的,因此它可能仍然需要一些改进。可以通过添加 来禁用它,同时使其他分析器检查保持有效-Wno-analyzer-use-of-uninitialized-value。
事实证明,每个开发人员在链接的错误报告中的回答-fanalyzer目前无法在 C++ 上正常工作,并且不建议在 C++ 代码上使用。可以在此处找到跟踪 C++ 问题的元错误。
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |