GCC 错误:如果已知函数正常返回,则函数可能是属性"pure"的候选者



给定此代码:

#include <cstdlib>
void func(int x)
{
if (x)
abort();
};

g++ -Werror=suggest-attribute=pure抱怨:

错误:如果已知函数正常返回,则函数可能是属性"pure"的候选者

这对我来说似乎很奇怪 - 该函数不知道正常返回不是很明显吗? 有没有办法告诉 GCC 它并不总是正常返回,或者我不希望此特定函数出现此警告?

演示:https://godbolt.org/g/720VOT

这似乎是 gcc 中的一个错误(或者至少是文档和实际实现的差异)。关于-Wsuggest-attribute=pure的文件如下:


-Wsuggest-attribute=pure-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn

警告可能成为属性pure候选项的函数,constnoreturn. 编译器仅对可见函数发出警告 在其他编译单元中或(在pureconst的情况下)如果 无法证明函数正常返回。函数返回 通常,如果它不包含无限循环或异常返回 投掷、呼叫abort或诱捕。此分析需要选项-fipa-pure-const,默认情况下在-O及更高时启用。 优化级别越高,分析的准确性就越高。

但是,实际分析似乎忽略了不回电的可能性,尽管它尊重可能的例外:

$ cat test-noreturn.cpp 
[[noreturn]] void foo();
void func(int x)
{
if (x)
foo();
}
$ g++ -std=c++11 -c -O -Wsuggest-attribute=pure test-noreturn.cpp 
$ cat test-noreturn-nothrow.cpp 
[[noreturn]] void foo() throw();
//                      ^^^^^^^
void func(int x)
{
if (x)
foo();
}
$ g++ -std=c++11 -c -O -Wsuggest-attribute=pure test-noreturn-nothrow.cpp 
test-noreturn-nothrow.cpp: In function ‘void func(int)’:
test-noreturn-nothrow.cpp:4:6: warning: function might be candidate for attribute ‘pure’ if it is known to return normally [-Wsuggest-attribute=pure]
void func(int x)
^

相关内容

  • 没有找到相关文章

最新更新