diff --git a/elab_lval.cc b/elab_lval.cc index 1068954d1..4d14fdb83 100644 --- a/elab_lval.cc +++ b/elab_lval.cc @@ -883,8 +883,10 @@ bool PEIdent::elaborate_lval_net_idx_(Design*des, calculate_up_do_width_(des, scope, wid); NetExpr*base = elab_and_eval(des, scope, index_tail.msb, -1); + if (!base) + return false; - if (base && base->expr_type() == IVL_VT_REAL) { + if (base->expr_type() == IVL_VT_REAL) { cerr << get_fileline() << ": error: Indexed part select base " "expression for "; cerr << lv->sig()->name() << "[" << *base; diff --git a/ivtest/ivltests/sv_lval_idx_part_invalid_base_down_fail.v b/ivtest/ivltests/sv_lval_idx_part_invalid_base_down_fail.v new file mode 100644 index 000000000..769a76899 --- /dev/null +++ b/ivtest/ivltests/sv_lval_idx_part_invalid_base_down_fail.v @@ -0,0 +1,9 @@ +// Check that invalid indexed part-select l-value bases report an error. + +module test; + reg [31:0] a; + + initial begin + a[does_not_exist -: 2] = 2'b00; + end +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index 01b7d6e5f..b547f40e4 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -345,6 +345,7 @@ sv_lval_concat_uarray_fail1 vvp_tests/sv_lval_concat_uarray_fail1.json sv_lval_concat_uarray_fail2 vvp_tests/sv_lval_concat_uarray_fail2.json sv_lval_concat_uarray_fail3 vvp_tests/sv_lval_concat_uarray_fail3.json sv_lval_concat_uarray_fail4 vvp_tests/sv_lval_concat_uarray_fail4.json +sv_lval_idx_part_invalid_base_down_fail vvp_tests/sv_lval_idx_part_invalid_base_down_fail.json sv_mixed_assign1 vvp_tests/sv_mixed_assign1.json sv_mixed_assign2 vvp_tests/sv_mixed_assign2.json sv_mixed_assign_error1 vvp_tests/sv_mixed_assign_error1.json diff --git a/ivtest/vvp_tests/sv_lval_idx_part_invalid_base_down_fail.json b/ivtest/vvp_tests/sv_lval_idx_part_invalid_base_down_fail.json new file mode 100644 index 000000000..e04a3a978 --- /dev/null +++ b/ivtest/vvp_tests/sv_lval_idx_part_invalid_base_down_fail.json @@ -0,0 +1,5 @@ +{ + "type" : "CE", + "source" : "sv_lval_idx_part_invalid_base_down_fail.v", + "iverilog-args" : [ "-g2001" ] +}