From 6713b343cc0fb3cda442e98031b355d87836ba48 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 27 Dec 2022 08:38:38 -0800 Subject: [PATCH] Report error for packed struct default member values SystemVerilog allows struct members to have default values specified as part of the struct declaration. But this is only allowed for unpacked structs. For packed structs an error should be reported. This is defined in section 7.2.2 ("Assigning to structures") of the LRM (1800-2017). Currently default member values are just silently discarded if specified for a packed struct. Make sure to report an error instead. Signed-off-by: Lars-Peter Clausen --- elab_type.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/elab_type.cc b/elab_type.cc index 2e5fbdf74..b611f655b 100644 --- a/elab_type.cc +++ b/elab_type.cc @@ -242,6 +242,13 @@ ivl_type_t struct_type_t::elaborate_type_raw(Design*des, NetScope*scope) const ; cur_name != curp->names->end() ; ++ cur_name) { decl_assignment_t*namep = *cur_name; + if (packed_flag && namep->expr) { + cerr << namep->expr->get_fileline() << " error: " + << "Packed structs must not have default member values." + << endl; + des->errors++; + } + netstruct_t::member_t memb; memb.name = namep->name; memb.net_type = elaborate_array_type(des, scope, *this,