C++ -Warray在内联函数g++;4.9.2

C++ -Warray在内联函数g++;4.9.2,c++,gcc,C++,Gcc,我收到了我遇到过的最奇怪的警告。我有一个内联函数,在其中我做了一些类似 inline int f(int n) { int myarray[maxn]; myarray[n-1] = 1; } 参数maxn在头文件中定义为constexpr。传递给f的参数n在我的代码中总是小于或等于maxn。然而,每当我编译时,我都会收到警告 warning: array subscript is above array bounds [-Warray-bounds] 在行myarray[n

我收到了我遇到过的最奇怪的警告。我有一个内联函数,在其中我做了一些类似

inline int f(int n)
{
    int myarray[maxn];
    myarray[n-1] = 1;
}
参数
maxn
在头文件中定义为
constexpr
。传递给
f
的参数
n
在我的代码中总是小于或等于
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;

如果(n>maxn)cerr它看起来像是数组边界检查的假阳性问题,已经针对
gcc
报告了好几次(并且),例如,当使用
-02
gcc 4.8.2
gcc 4.9.0
时,此错误报告显示此代码():

int-arr[1];
int n=0;
int main(){

如果(谢谢!我将首先尝试将代码放入最简单的可编译示例中(现在不是很简单:),但肯定会这样做。现在我只使用
#pragma GCC diagnostic ignored“-Warray bounds”
使警告静音。@vsoftco如果你能用示例更新你的问题,并最终更新错误报告,那将是非常好的。我无法重现你的特定问题,但我认为没有任何在线编译器有
gcc 4.9.2
@Shafik公平地说,这个问题缺少MCVE。因此我并不奇怪你不能重现我的问题t、 @remyabel我将给出一个最小的示例,但是它有点复杂,因为我调用了lambdas等内部的一些函数,还不能准确地计算它发生的时间。@remyabel一个完整的示例总是更好,但信息是强烈的指示性的,虽然不够理想。好奇的是,你提交过错误报告吗?@ShafikYaghmour Wil我会尽快把它简化为一个最小的例子,我的代码非常复杂(lambda通过引用一些参数和线程来捕获)
cout << n; 
int arr[1];
int n = 0;

int main() {
  if (n <= 0) n = 0;
  arr[n] = 0;
  if (n <= 0) n = 0;
  return 0;
}