m_storage is used uninitialized according to GCC 14.2.1
Report
When compiling:
#include "Eigen/Core"
int main() {
Eigen::Vector3i v{1,2,3};
v = {};
return v[0];
}
GCC 14.2.1 complains:
$ g++ -std=c++17 -W -Wall -Wextra -pedantic -O3 eigen.cpp -I ../../submodules/eigen/
Tiedostossa, joka sisällytettiin kohdasta ../../submodules/eigen/Eigen/Core:318,
kohdasta eigen.cpp:1:
In member function ”constexpr Eigen::PlainObjectBase<Derived>& Eigen::PlainObjectBase<Derived>::operator=(Eigen::PlainObjectBase<Derived>&&) [with Derived = Eigen::Matrix<int, 3, 1>]”,
inlined from ”constexpr Eigen::Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>& Eigen::Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>::operator=(Eigen::Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>&&) [with Scalar_ = int; int Rows_ = 3; int Cols_ = 1; int Options_ = 0; int MaxRows_ = 3; int MaxCols_ = 1]” at ../../submodules/eigen/Eigen/src/Core/Matrix.h:265:20,
inlined from ”int main()” at eigen.cpp:4:7:
../../submodules/eigen/Eigen/src/Core/PlainObjectBase.h:480:5: varoitus: ”*(int*)((char*)&<unnamed> + offsetof(Eigen::Matrix<int, 3, 1, 0, 3, 1>,Eigen::Matrix<int, 3, 1, 0, 3, 1>::<unnamed>.Eigen::PlainObjectBase<Eigen::Matrix<int, 3, 1, 0, 3, 1> >::<unnamed>.Eigen::MatrixBase<Eigen::Matrix<int, 3, 1, 0, 3, 1> >::<unnamed>.Eigen::DenseBase<Eigen::Matrix<int, 3, 1, 0, 3, 1> >::<unnamed>.Eigen::DenseCoeffsBase<Eigen::Matrix<int, 3, 1, 0, 3, 1>, 3>::<unnamed>.Eigen::DenseCoeffsBase<Eigen::Matrix<int, 3, 1, 0, 3, 1>, 1>::<unnamed>.Eigen::DenseCoeffsBase<Eigen::Matrix<int, 3, 1, 0, 3, 1>, 0>::<unnamed>))” is used uninitialized [-Wuninitialized]
480 | m_storage = std::move(other.m_storage);
| ^~~~~~~~~
eigen.cpp: In function ”int main()”:
eigen.cpp:4:14: huom: ”<anonymous>” esitelty täällä
4 | v = {};
| ^
Afaik = {} is valid code that would be nice to use with Eigen types without warnings. Or is this GCC bug?..
Environment
- Operating System : Linux
- Architecture : x64
- Eigen Version : 2e76277b