diff --git a/elab_type.cc b/elab_type.cc index 48dd1dcbd..a6be08f69 100644 --- a/elab_type.cc +++ b/elab_type.cc @@ -215,7 +215,8 @@ ivl_type_t struct_type_t::elaborate_type_raw(Design*des, NetScope*scope) const netstruct_t::member_t memb; memb.name = namep->name; - memb.net_type = mem_vec; + memb.net_type = elaborate_array_type(des, scope, *this, + mem_vec, namep->index); res->append_member(des, memb); } } diff --git a/ivtest/ivltests/struct_packed_darray_fail.v b/ivtest/ivltests/struct_packed_darray_fail.v new file mode 100644 index 000000000..2c06317cc --- /dev/null +++ b/ivtest/ivltests/struct_packed_darray_fail.v @@ -0,0 +1,14 @@ +// Check that declaring a dynamic array typed member in a packed struct is an +// error. + +module test; + + struct packed { + int x[]; + } s; + + initial begin + $display("FAILED"); + end + +endmodule diff --git a/ivtest/ivltests/struct_packed_queue_fail.v b/ivtest/ivltests/struct_packed_queue_fail.v new file mode 100644 index 000000000..4ab174827 --- /dev/null +++ b/ivtest/ivltests/struct_packed_queue_fail.v @@ -0,0 +1,13 @@ +// Check that declaring a queue typed member in a packed struct is an error. + +module test; + + struct packed { + int x[$]; + } s; + + initial begin + $display("FAILED"); + end + +endmodule diff --git a/ivtest/ivltests/struct_packed_uarray_fail.v b/ivtest/ivltests/struct_packed_uarray_fail.v new file mode 100644 index 000000000..d05ccd25a --- /dev/null +++ b/ivtest/ivltests/struct_packed_uarray_fail.v @@ -0,0 +1,14 @@ +// Check that declaring an unpacked array typed member in a packed struct is an +// error. + +module test; + + struct packed { + int x[2]; + } s; + + initial begin + $display("FAILED"); + end + +endmodule diff --git a/ivtest/ivltests/union_packed_darray_fail.v b/ivtest/ivltests/union_packed_darray_fail.v new file mode 100644 index 000000000..50a5440ca --- /dev/null +++ b/ivtest/ivltests/union_packed_darray_fail.v @@ -0,0 +1,14 @@ +// Check that declaring a dynamic array typed member in a packed union is an +// error. + +module test; + + union packed { + int x[]; + } s; + + initial begin + $display("FAILED"); + end + +endmodule diff --git a/ivtest/ivltests/union_packed_queue_fail.v b/ivtest/ivltests/union_packed_queue_fail.v new file mode 100644 index 000000000..8f9a94a86 --- /dev/null +++ b/ivtest/ivltests/union_packed_queue_fail.v @@ -0,0 +1,14 @@ +// Check that declaring a queue typed member in a packed union is an +// error. + +module test; + + union packed { + int x[$]; + } s; + + initial begin + $display("FAILED"); + end + +endmodule diff --git a/ivtest/ivltests/union_packed_uarray_fail.v b/ivtest/ivltests/union_packed_uarray_fail.v new file mode 100644 index 000000000..9cea64010 --- /dev/null +++ b/ivtest/ivltests/union_packed_uarray_fail.v @@ -0,0 +1,15 @@ +// Check that declaring an unpacked array typed member in a packed union is an +// error. + +module test; + + struct packed { + int x; + shortint y[2]; + } s; + + initial begin + $display("FAILED"); + end + +endmodule diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index b69e4c0da..acc997669 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -470,8 +470,11 @@ struct_line_info CE,-g2009 ivltests gold=struct_line_info.gold struct_member_signed normal,-g2009 ivltests struct_packed_array normal,-g2009 ivltests struct_packed_array2 normal,-g2009 ivltests +struct_packed_darray_fail CE,-g2009 ivltests +struct_packed_queue_fail CE,-g2009 ivltests struct_packed_sysfunct normal,-g2009 ivltests struct_packed_sysfunct2 normal,-g2009 ivltests +struct_packed_uarray_fail CE,-g2009 ivltests struct_packed_write_read2 normal,-g2009 ivltests struct_invalid_member CE,-g2009 ivltests gold=struct_invalid_member.gold struct_signed normal,-g2009 ivltests @@ -752,6 +755,9 @@ ubyte_test normal,-g2005-sv ivltests uint_test normal,-g2005-sv ivltests ulongint_test normal,-g2005-sv ivltests undef_lval_select_SV normal,-g2009 ivltests +union_packed_darray_fail CE,-g2009 ivltests +union_packed_queue_fail CE,-g2009 ivltests +union_packed_uarray_fail CE,-g2009 ivltests unp_array_typedef normal,-g2005-sv ivltests packed_dims_invalid_class CE,-g2005-sv ivltests packed_dims_invalid_module CE,-g2005-sv ivltests