From b57d860f3ef52bc938fab26bab09dd47de7efe18 Mon Sep 17 00:00:00 2001 From: Florian Maurin <5298202-florian360@users.noreply.gitlab.com> Date: Sat, 4 Apr 2026 02:41:09 +0000 Subject: [PATCH] Fix GCC maybe-uninitialized warning in InnerProduct libeigen/eigen!2386 Closes #3015 --- Eigen/src/Core/InnerProduct.h | 45 +++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/Eigen/src/Core/InnerProduct.h b/Eigen/src/Core/InnerProduct.h index ad9844dc9..9c57e7a7a 100644 --- a/Eigen/src/Core/InnerProduct.h +++ b/Eigen/src/Core/InnerProduct.h @@ -142,31 +142,36 @@ struct inner_product_impl { const UnsignedIndex numPackets = size / PacketSize; const UnsignedIndex numRemPackets = (packetEnd - quadEnd) / PacketSize; - Packet presult0, presult1, presult2, presult3; + Packet presult0 = eval.template packet(0 * PacketSize); + if (numPackets >= 2) { + Packet presult1 = eval.template packet(1 * PacketSize); + if (numPackets >= 3) { + Packet presult2 = eval.template packet(2 * PacketSize); + if (numPackets >= 4) { + Packet presult3 = eval.template packet(3 * PacketSize); - presult0 = eval.template packet(0 * PacketSize); - if (numPackets >= 2) presult1 = eval.template packet(1 * PacketSize); - if (numPackets >= 3) presult2 = eval.template packet(2 * PacketSize); - if (numPackets >= 4) { - presult3 = eval.template packet(3 * PacketSize); + for (UnsignedIndex k = 4 * PacketSize; k < quadEnd; k += 4 * PacketSize) { + presult0 = eval.packet(presult0, k + 0 * PacketSize); + presult1 = eval.packet(presult1, k + 1 * PacketSize); + presult2 = eval.packet(presult2, k + 2 * PacketSize); + presult3 = eval.packet(presult3, k + 3 * PacketSize); + } - for (UnsignedIndex k = 4 * PacketSize; k < quadEnd; k += 4 * PacketSize) { - presult0 = eval.packet(presult0, k + 0 * PacketSize); - presult1 = eval.packet(presult1, k + 1 * PacketSize); - presult2 = eval.packet(presult2, k + 2 * PacketSize); - presult3 = eval.packet(presult3, k + 3 * PacketSize); + if (numRemPackets >= 1) { + presult0 = eval.packet(presult0, quadEnd + 0 * PacketSize); + if (numRemPackets >= 2) { + presult1 = eval.packet(presult1, quadEnd + 1 * PacketSize); + if (numRemPackets == 3) presult2 = eval.packet(presult2, quadEnd + 2 * PacketSize); + } + } + + presult2 = padd(presult2, presult3); + } + presult1 = padd(presult1, presult2); } - - if (numRemPackets >= 1) presult0 = eval.packet(presult0, quadEnd + 0 * PacketSize); - if (numRemPackets >= 2) presult1 = eval.packet(presult1, quadEnd + 1 * PacketSize); - if (numRemPackets == 3) presult2 = eval.packet(presult2, quadEnd + 2 * PacketSize); - - presult2 = padd(presult2, presult3); + presult0 = padd(presult0, presult1); } - if (numPackets >= 3) presult1 = padd(presult1, presult2); - if (numPackets >= 2) presult0 = padd(presult0, presult1); - Scalar result = predux(presult0); for (UnsignedIndex k = packetEnd; k < size; k++) { result = eval.coeff(result, k);