GCC8.2 如何启用警告:数组下标高于数组边界 [-Warray-bounds]
GCC8.2 How to enable warning: array subscript is above array bounds [-Warray-bounds]
我想在gcc8.2下启用数组边界检查,这样可以帮助在编译期间检查数组下标是否越界,它可能会给出如下警告:
array subscript is above array bounds [-Warray-bounds]
我使用 coliru 制作了一个演示:
#include <iostream>
struct A
{
int a;
char ch[1];
};
int main()
{
volatile A test;
test.a = 1;
test.ch[0] = 'a';
test.ch[1] = 'b';
test.ch[2] = 'c';
test.ch[3] = 'd';
test.ch[4] = '[=10=]';
std::cout << sizeof(test) << std::endl
<< test.ch[1] << std::endl;
}
编译并运行使用命令:
g++ -std=c++11 -O2 -Wall main.cpp && ./a.out
输出如下所示,没有任何警告或错误。
8
b
那么gcc8.2支持数组边界检查吗?如何启用它?
编辑:
更进一步,在第一个的基础上,如果去掉第volatile A test;
行的volatile
,是否可以启用数组边界检查?
谢谢。
默认情况下,-Warray-bounds
不会对结构末尾的数组发出警告,大概是为了避免对预标准化灵活数组成员的误报。要启用该检查,请使用 -Warray-bounds=2
。 Demo.
另请注意,-Warray-bounds
仅在 -ftree-vrp
标志处于活动状态时有效,默认情况下为 -O2
及更高。
我想在gcc8.2下启用数组边界检查,这样可以帮助在编译期间检查数组下标是否越界,它可能会给出如下警告:
array subscript is above array bounds [-Warray-bounds]
我使用 coliru 制作了一个演示:
#include <iostream>
struct A
{
int a;
char ch[1];
};
int main()
{
volatile A test;
test.a = 1;
test.ch[0] = 'a';
test.ch[1] = 'b';
test.ch[2] = 'c';
test.ch[3] = 'd';
test.ch[4] = '[=10=]';
std::cout << sizeof(test) << std::endl
<< test.ch[1] << std::endl;
}
编译并运行使用命令:
g++ -std=c++11 -O2 -Wall main.cpp && ./a.out
输出如下所示,没有任何警告或错误。
8
b
那么gcc8.2支持数组边界检查吗?如何启用它?
编辑:
更进一步,在第一个volatile A test;
行的volatile
,是否可以启用数组边界检查?
谢谢。
默认情况下,-Warray-bounds
不会对结构末尾的数组发出警告,大概是为了避免对预标准化灵活数组成员的误报。要启用该检查,请使用 -Warray-bounds=2
。 Demo.
另请注意,-Warray-bounds
仅在 -ftree-vrp
标志处于活动状态时有效,默认情况下为 -O2
及更高。