Fix UBSAN abort in LSTM implementation
Fix: 158708113
Test: NNT_operations
Change-Id: I49e4468a65d44abb73e8e0990cba32c327428366
Merged-In: I49e4468a65d44abb73e8e0990cba32c327428366
(cherry picked from commit 46c71732f739a91e515a2930527e60a79f19cea5)
diff --git a/common/operations/LSTM.cpp b/common/operations/LSTM.cpp
index ba5d46a..3051cfd 100644
--- a/common/operations/LSTM.cpp
+++ b/common/operations/LSTM.cpp
@@ -477,8 +477,8 @@
: nullptr;
float* outputCurrentTimeStep =
outputData + (forwardSequence ? 0 : batchOutputSize * (maxTime - 1));
- const int batchInputDelta = forwardSequence ? batchInputSize : -batchInputSize;
- const int batchOutputDelta = forwardSequence ? batchOutputSize : -batchOutputSize;
+ const int batchInputDelta = (forwardSequence ? 1 : -1) * static_cast<int>(batchInputSize);
+ const int batchOutputDelta = (forwardSequence ? 1 : -1) * static_cast<int>(batchOutputSize);
for (int t = 0; t < maxTime; ++t) {
LSTMStep(params, inputCurrentTimeStep, batchInputShape, input_to_input_weights_buffer,
@@ -715,8 +715,8 @@
: nullptr;
float* outputCurrentTimeStep =
outputData + (forwardSequence ? 0 : batchOutputSize * (maxTime - 1));
- const int batchInputDelta = forwardSequence ? batchInputSize : -batchInputSize;
- const int batchOutputDelta = forwardSequence ? batchOutputSize : -batchOutputSize;
+ const int batchInputDelta = (forwardSequence ? 1 : -1) * static_cast<int>(batchInputSize);
+ const int batchOutputDelta = (forwardSequence ? 1 : -1) * static_cast<int>(batchOutputSize);
for (int t = 0; t < maxTime; ++t) {
LSTMStep(params, inputCurrentTimeStep, batchInputShape,