From a5cc905184f3a8112063742a13653a8be148a51b Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Fri, 7 Nov 2025 15:52:24 +1300 Subject: [PATCH] simplify.cc: Fix unsized const in params --- frontends/ast/simplify.cc | 10 +++++++--- tests/verilog/unbased_unsized.sv | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 97abf7452..330e9ef12 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -2231,9 +2231,13 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin } if (children[0]->type == AST_CONSTANT) { if (width != int(children[0]->bits.size())) { - RTLIL::SigSpec sig(children[0]->bits); - sig.extend_u0(width, children[0]->is_signed); - children[0] = mkconst_bits(location, sig.as_const().to_bits(), is_signed); + RTLIL::Const val; + if (children[0]->is_unsized) { + val = children[0]->bitsAsUnsizedConst(width); + } else { + val = children[0]->bitsAsConst(width); + } + children[0] = mkconst_bits(location, val.to_bits(), is_signed); fixup_hierarchy_flags(); } children[0]->is_signed = is_signed; diff --git a/tests/verilog/unbased_unsized.sv b/tests/verilog/unbased_unsized.sv index 1d0c5a72c..af932cb74 100644 --- a/tests/verilog/unbased_unsized.sv +++ b/tests/verilog/unbased_unsized.sv @@ -6,6 +6,11 @@ module pass_through( endmodule module top; + localparam logic [63:0] + l01 = '0, + l02 = '1, + l03 = 'x, + l04 = 'z; logic [63:0] o01, o02, o03, o04, o05, o06, o07, o08, @@ -36,5 +41,9 @@ module top; assert (o10 === {64 {1'b1}}); assert (o11 === {64 {1'bx}}); assert (o12 === {64 {1'bz}}); + assert (l01 === {64 {1'b0}}); + assert (l02 === {64 {1'b1}}); + assert (l03 === {64 {1'bx}}); + assert (l04 === {64 {1'bz}}); end endmodule