![](/img/trans.png)
[英]Why does gcc gives me maybe-uninitialized warning for deque::insert with a filtered range
[英]Why is GCC giving me a use of uninitialized value warning?
我一直在处理大型 C++ 程序,但在处理 C 项目时忘记添加编译器标志/警告的常用列表。 启用-fanalyzer
标志后,我的代码开始收到很多来自 GCC 12.2 的“警告:使用未初始化的值‘<未知>’”消息。 这是我能够在 Compiler Explorer 中生成的一个独立示例:
#include <string>
std::string square(int num) {
return std::to_string(num * num);
}
编译器 output:
<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
|
这个简单的square
function真的有这样的问题吗? 还是我错过了更大的东西? GCC中的static分析是不是坏了?
这显然是误报。 分析器抱怨任何 function 返回std::string
(和其他标准库类型),例如
#include <string>
std::string f() {
return {};
}
以及。 ( https://godbolt.org/z/oKrfrbn5o )
令人惊讶的是,我找不到关于这个看似显而易见的问题的任何以前的错误报告。 但是,@JasonLiam 已在此处提交了一份。
-Wanalyzer-use-of-uninitialized-value
也是一个相对较新的功能,添加了 GCC 12,因此它可能仍然需要一些改进。 通过添加-Wno-analyzer-use-of-uninitialized-value
可以禁用它,同时使其他分析器检查生效。
事实证明,根据开发人员在链接的错误报告中的回答, -fanalyzer
目前无法与 C++ 一起正常工作,不建议在 C++ 代码上使用。 可以在此处找到跟踪 C++ 问题的元错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.