我收到了有史以来最奇怪的警告。我有一个内联的函数,在这个函数中,我做的事情如下
inline int f(int n)
{
int myarray[maxn];
myarray[n-1] = 1;
}参数maxn在头文件中定义为constexpr。在我的代码中,传递给f的参数f总是较小或等于maxn。但是,每当我编译时,我都会收到警告。
warning: array subscript is above array bounds [-Warray-bounds]在行myarray[n-1] = 1中。
它只使用g++4.9 (clang++不发出任何警告,以及以前的g++版本),并且只有当函数标记为inline时才会发生。如果在函数中使用测试条件,如
if(n > maxn) cerr << "ERROR!"<< endl;甚至一个简单的显示语句
cout << n; 警告将消失(当然,if被计算为false,因此不会显示错误消息,因为我绝对确定是n <= maxn;)。
有人知道这是否是g++问题吗?你以前见过吗?
发布于 2014-12-05 02:41:41
对于gcc ( 这里和这里),似乎多次报告了数组边界检查的假阳性问题(这里和这里),例如,这个bug报告Picon [Bug c/59564]新的:假阳性数组-用-O2进行的Warray边界检查在使用-02和gcc 4.8.2时显示了该代码,gcc 4.9.0生成了一个假阳性(http://coliru.stacked-crooked.com/a/0a56eb5511067b4b):
int arr[1];
int n = 0;
int main() {
if (n <= 0) n = 0;
arr[n] = 0;
if (n <= 0) n = 0;
return 0;
}因此,这可能是一个回归或不同形式的错误,您应该提交一个错误报告。
https://stackoverflow.com/questions/27307684
复制相似问题