首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-内联函数g++4.9.2中的界伪警告

-内联函数g++4.9.2中的界伪警告
EN

Stack Overflow用户
提问于 2014-12-05 02:14:14
回答 1查看 531关注 0票数 1

我收到了有史以来最奇怪的警告。我有一个内联的函数,在这个函数中,我做的事情如下

代码语言:javascript
复制
inline int f(int n)
{
    int myarray[maxn];
    myarray[n-1] = 1;
}

参数maxn在头文件中定义为constexpr。在我的代码中,传递给f的参数f总是较小或等于maxn。但是,每当我编译时,我都会收到警告。

代码语言:javascript
复制
warning: array subscript is above array bounds [-Warray-bounds]

在行myarray[n-1] = 1中。

它只使用g++4.9 (clang++不发出任何警告,以及以前的g++版本),并且只有当函数标记为inline时才会发生。如果在函数中使用测试条件,如

代码语言:javascript
复制
if(n > maxn) cerr << "ERROR!"<< endl;

甚至一个简单的显示语句

代码语言:javascript
复制
cout << n; 

警告将消失(当然,if被计算为false,因此不会显示错误消息,因为我绝对确定是n <= maxn;)。

有人知道这是否是g++问题吗?你以前见过吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 02:41:41

对于gcc ( 这里这里),似乎多次报告了数组边界检查的假阳性问题(这里这里),例如,这个bug报告Picon [Bug c/59564]新的:假阳性数组-用-O2进行的Warray边界检查在使用-02gcc 4.8.2时显示了该代码,gcc 4.9.0生成了一个假阳性(http://coliru.stacked-crooked.com/a/0a56eb5511067b4b):

代码语言:javascript
复制
int arr[1];
int n = 0;

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

因此,这可能是一个回归或不同形式的错误,您应该提交一个错误报告

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27307684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档