summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-05-01 00:44:56 +0200
committerTor Egge <Tor.Egge@online.no>2021-05-01 00:44:56 +0200
commite65094730f0c6f64c54ec79091c281d405653062 (patch)
tree74f7768fb99e2d1586ef58b7a48401ddf7d40b61 /eval
parent50a3cd695782e747afdf82e8143c8a81b24dbb10 (diff)
Cast from double to size_t triggers undefined behavior for negative values.
Try to reduce issue somewhat by casting via int64_t.
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/eval/test/reference_operations.cpp2
-rw-r--r--eval/src/vespa/eval/instruction/dense_lambda_peek_optimizer.cpp2
-rw-r--r--eval/src/vespa/eval/instruction/dense_tensor_peek_function.cpp2
3 files changed, 3 insertions, 3 deletions
diff --git a/eval/src/vespa/eval/eval/test/reference_operations.cpp b/eval/src/vespa/eval/eval/test/reference_operations.cpp
index 34452c1b2ae..577af47e2ae 100644
--- a/eval/src/vespa/eval/eval/test/reference_operations.cpp
+++ b/eval/src/vespa/eval/eval/test/reference_operations.cpp
@@ -239,7 +239,7 @@ TensorSpec ReferenceOperations::peek(const PeekSpec &peek_spec, const std::vecto
if (is_mapped_dim(dim)) {
addr.emplace(dim, vespalib::make_string("%" PRId64, int64_t(child_value)));
} else {
- addr.emplace(dim, child_value);
+ addr.emplace(dim, (int64_t)child_value);
}
}
}, label_or_child);
diff --git a/eval/src/vespa/eval/instruction/dense_lambda_peek_optimizer.cpp b/eval/src/vespa/eval/instruction/dense_lambda_peek_optimizer.cpp
index e584d94edbe..e1d5a5d4b7a 100644
--- a/eval/src/vespa/eval/instruction/dense_lambda_peek_optimizer.cpp
+++ b/eval/src/vespa/eval/instruction/dense_lambda_peek_optimizer.cpp
@@ -139,7 +139,7 @@ struct PeekAnalyzer {
do {
for (size_t i = 0; i < src_dim_funs.size(); ++i) {
auto dim_fun = src_dim_funs[i]->get_function();
- size_t dim_idx = dim_fun(&params[0]);
+ size_t dim_idx = (int64_t) dim_fun(&params[0]);
if (dim_idx >= src_dim_sizes[i]) {
return Result::invalid();
}
diff --git a/eval/src/vespa/eval/instruction/dense_tensor_peek_function.cpp b/eval/src/vespa/eval/instruction/dense_tensor_peek_function.cpp
index b5f99ad6c8b..323e0a59ff3 100644
--- a/eval/src/vespa/eval/instruction/dense_tensor_peek_function.cpp
+++ b/eval/src/vespa/eval/instruction/dense_tensor_peek_function.cpp
@@ -21,7 +21,7 @@ void my_tensor_peek_op(InterpretedFunction::State &state, uint64_t param) {
if (dim.first >= 0) {
idx += (dim.first * factor);
} else {
- size_t dim_idx = state.peek(0).as_double();
+ size_t dim_idx = (int64_t) state.peek(0).as_double();
state.stack.pop_back();
valid &= (dim_idx < dim.second);
idx += (dim_idx * factor);