我收到了我遇到过的最奇怪的警告。我有一个内联函数,我正在做类似
的事情inline int f(int n)
{
int myarray[maxn];
myarray[n-1] = 1;
}
参数maxn
在头文件中定义为constexpr
。在我的代码中,传递给n
的参数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++
问题吗?你以前遇到过吗?
答案 0 :(得分:2)
对gcc
多次(here和here)报告数组边界检查的误报问题,例如此错误报告 Picon
[Bug c/59564] New: False positive array -Warray-bounds check with -O2显示了这一点使用-02
时代码和gcc 4.8.2
以及gcc 4.9.0
会产生误报( see it live ):
int arr[1];
int n = 0;
int main() {
if (n <= 0) n = 0;
arr[n] = 0;
if (n <= 0) n = 0;
return 0;
}
因此,这可能是错误的回归或不同形式,您应该提交bug report。