mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Fix GCC 13 array-bounds warning in TensorContraction
libeigen/eigen!2311 Closes #3017
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
05295a818b
commit
62e23f79dd
@@ -490,11 +490,16 @@ struct TensorContractionEvaluatorBase {
|
||||
if (dim_idx != i) {
|
||||
m_lhs_inner_dim_contiguous = false;
|
||||
}
|
||||
// Suppress false-positive GCC -Warray-bounds warning at -O3 when
|
||||
// left_nocontract_t has size 1 (the runtime check prevents OOB access).
|
||||
EIGEN_DIAGNOSTICS(push)
|
||||
EIGEN_DIAGNOSTICS_OFF(disable : 4789, ignored "-Warray-bounds")
|
||||
if (nocontract_idx + 1 < internal::array_size<left_nocontract_t>::value) {
|
||||
m_i_strides[nocontract_idx + 1] = m_i_strides[nocontract_idx] * eval_left_dims[i];
|
||||
} else {
|
||||
m_i_size = m_i_strides[nocontract_idx] * eval_left_dims[i];
|
||||
}
|
||||
EIGEN_DIAGNOSTICS(pop)
|
||||
dim_idx++;
|
||||
nocontract_idx++;
|
||||
}
|
||||
@@ -512,11 +517,14 @@ struct TensorContractionEvaluatorBase {
|
||||
}
|
||||
if (!contracting) {
|
||||
m_dimensions[dim_idx] = eval_right_dims[i];
|
||||
EIGEN_DIAGNOSTICS(push)
|
||||
EIGEN_DIAGNOSTICS_OFF(disable : 4789, ignored "-Warray-bounds")
|
||||
if (nocontract_idx + 1 < internal::array_size<right_nocontract_t>::value) {
|
||||
m_j_strides[nocontract_idx + 1] = m_j_strides[nocontract_idx] * eval_right_dims[i];
|
||||
} else {
|
||||
m_j_size = m_j_strides[nocontract_idx] * eval_right_dims[i];
|
||||
}
|
||||
EIGEN_DIAGNOSTICS(pop)
|
||||
m_right_nocontract_strides[nocontract_idx] = rhs_strides[i];
|
||||
dim_idx++;
|
||||
nocontract_idx++;
|
||||
@@ -537,11 +545,14 @@ struct TensorContractionEvaluatorBase {
|
||||
Index size = eval_left_dims[left];
|
||||
eigen_assert(size == eval_right_dims[right] && "Contraction axes must be same size");
|
||||
|
||||
EIGEN_DIAGNOSTICS(push)
|
||||
EIGEN_DIAGNOSTICS_OFF(disable : 4789, ignored "-Warray-bounds")
|
||||
if (i + 1 < static_cast<int>(internal::array_size<contract_t>::value)) {
|
||||
m_k_strides[i + 1] = m_k_strides[i] * size;
|
||||
} else {
|
||||
m_k_size = m_k_strides[i] * size;
|
||||
}
|
||||
EIGEN_DIAGNOSTICS(pop)
|
||||
m_left_contracting_strides[i] = lhs_strides[left];
|
||||
m_right_contracting_strides[i] = rhs_strides[right];
|
||||
|
||||
@@ -878,18 +889,18 @@ struct TensorContractionEvaluatorBase {
|
||||
protected:
|
||||
Dimensions m_dimensions;
|
||||
|
||||
contract_t m_k_strides;
|
||||
contract_t m_left_contracting_strides;
|
||||
contract_t m_right_contracting_strides;
|
||||
contract_t m_k_strides{};
|
||||
contract_t m_left_contracting_strides{};
|
||||
contract_t m_right_contracting_strides{};
|
||||
|
||||
bool m_lhs_inner_dim_contiguous;
|
||||
bool m_rhs_inner_dim_contiguous;
|
||||
bool m_rhs_inner_dim_reordered;
|
||||
|
||||
left_nocontract_t m_i_strides;
|
||||
right_nocontract_t m_j_strides;
|
||||
left_nocontract_t m_left_nocontract_strides;
|
||||
right_nocontract_t m_right_nocontract_strides;
|
||||
left_nocontract_t m_i_strides{};
|
||||
right_nocontract_t m_j_strides{};
|
||||
left_nocontract_t m_left_nocontract_strides{};
|
||||
right_nocontract_t m_right_nocontract_strides{};
|
||||
|
||||
Index m_i_size;
|
||||
Index m_j_size;
|
||||
|
||||
Reference in New Issue
Block a user