GCC 11伪数组下标部分超出数组边界警告



在从GCC 10.2切换到GCC 11时遇到错误警告,我正在寻找解决方法。

char* const dest = data_.data();
if (src.length() > max_chars)
{
// does not fit, copy first max_chars (truncation occurs)
std::memcpy(dest, src.data(), max_chars);

在上述代码中,srcstd::string_view,dest是静态大小精确为max_charsstd::array。memcpy行生成警告(带-O3(:

array subscript ‘unsigned char [81][1]’ is partly outside array bounds of ‘myns::TrivialString<81> [1]’ [-Werror=array-bounds]

尽管代码中没有直接涉及的下标。我知道用are";部分";在较新的GCC版本中是越界的,这个问题与这个bug最相似,尽管我看到有一些bug出现了类似的症状。

我的一个变通方法是更换

std::memcpy(dest, src.data(), max_chars);

带有

std::copy_n(src.data(), max_chars, dest);

该解决方案没有可读性或性能下降。

最新更新