Skip to content

Commit 92afe26

Browse files
authored
Merge pull request #4879 from YosysHQ/krys/ub_fixes
Fixing undefined behaviours
2 parents 18a7c00 + cf52cf3 commit 92afe26

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

frontends/ast/simplify.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2936,7 +2936,10 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
29362936
lsb_expr->children[stride_ix]->detectSignWidth(stride_width, stride_sign);
29372937
max_width = std::max(i_width, stride_width);
29382938
// Stride width calculated from actual stride value.
2939-
stride_width = std::ceil(std::log2(std::abs(stride)));
2939+
if (stride == 0)
2940+
stride_width = 0;
2941+
else
2942+
stride_width = std::ceil(std::log2(std::abs(stride)));
29402943

29412944
if (i_width + stride_width > max_width) {
29422945
// For (truncated) i*stride to be within the range of dst, the following must hold:

kernel/celledges.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,13 @@ void shift_op(AbstractCellEdgesDatabase *db, RTLIL::Cell *cell)
253253
if (a_width == 1 && is_signed) {
254254
int skip = 1 << (k + 1);
255255
int base = skip -1;
256-
if (i % skip != base && i - a_width + 2 < 1 << b_width)
256+
if (i % skip != base && i - a_width + 2 < 1 << b_width_capped)
257257
db->add_edge(cell, ID::B, k, ID::Y, i, -1);
258258
} else if (is_signed) {
259-
if (i - a_width + 2 < 1 << b_width)
259+
if (i - a_width + 2 < 1 << b_width_capped)
260260
db->add_edge(cell, ID::B, k, ID::Y, i, -1);
261261
} else {
262-
if (i - a_width + 1 < 1 << b_width)
262+
if (i - a_width + 1 < 1 << b_width_capped)
263263
db->add_edge(cell, ID::B, k, ID::Y, i, -1);
264264
}
265265
// right shifts

0 commit comments

Comments
 (0)