Skip to content

Silence string overflow warning for GCC in initializer_list_construction test.

This looks to be a GCC bug. It doesn't seem to reproduce in a smaller example, making it hard to isolate.

Warning:

In file included from ../Eigen/Core:296,
                 from ../Eigen/QR:11,
                 from ../test/main.h:340,
                 from ../test/initializer_list_construction.cpp:10:
In constructor ‘Eigen::PlainObjectBase<Derived>::PlainObjectBase(const std::initializer_list<std::initializer_list<typename Eigen::internal::traits<T>::Scalar> >&) [with Derived = Eigen::Matrix<unsigned char, 5, 4, 0, 5, 4>]’,
    inlined from ‘Eigen::Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>::Matrix(const std::initializer_list<std::initializer_list<typename Eigen::internal::traits<Eigen::Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_> >::Scalar> >&) [with Scalar_ = unsigned char; int Rows_ = 5; int Cols_ = 4; int Options_ = 0; int MaxRows_ = 5; int MaxCols_ = 4]’ at ../Eigen/src/Core/Matrix.h:319:118,
    inlined from ‘void initializerListMatrixConstruction() [with Scalar = unsigned char]’ at ../test/initializer_list_construction.cpp:176:26:
../Eigen/src/Core/PlainObjectBase.h:583:44: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  583 |             coeffRef(row_index, col_index) = e;
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
In file included from ../Eigen/Core:289,
                 from ../Eigen/QR:11,
                 from ../test/main.h:340,
                 from ../test/initializer_list_construction.cpp:10:
../Eigen/src/Core/DenseStorage.h: In function ‘void initializerListMatrixConstruction() [with Scalar = unsigned char]’:
../Eigen/src/Core/DenseStorage.h:48:5: note: at offset 30 into destination object ‘Eigen::internal::plain_array<unsigned char, 20, 0, 0>::array’ of size 20
   48 |   T array[Size];
      |     ^~~~~

I've verified we never actually access offset 30 in the destination.

Merge request reports

Loading