From 47b6ee714d3f52b792a415b0c5907f2ada4dda8e Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sun, 9 Jan 2022 09:55:37 +0100 Subject: [PATCH 1/6] Remove unused pform_makewire() variants There are two versions of pform_makewire() that are not used anywhere, remove them. Signed-off-by: Lars-Peter Clausen --- pform.cc | 30 ------------------------------ pform.h | 18 ------------------ pform_struct_type.cc | 29 ----------------------------- 3 files changed, 77 deletions(-) diff --git a/pform.cc b/pform.cc index dd171773c..21a106c15 100644 --- a/pform.cc +++ b/pform.cc @@ -2823,36 +2823,6 @@ void pform_makewire(const vlltype&li, perm_string name, } } -/* - * This form takes a list of names and some type information, and - * generates a bunch of variables/nets. We use the basic - * pform_makewire above. - */ -void pform_makewire(const vlltype&li, - list*range, - bool signed_flag, - list*names, - NetNet::Type type, - NetNet::PortType pt, - ivl_variable_type_t dt, - list*attr, - PWSRType rt) -{ - for (list::iterator cur = names->begin() - ; cur != names->end() ; ++ cur ) { - perm_string txt = *cur; - pform_makewire(li, txt, type, pt, dt, attr); - /* This has already been done for real variables. */ - if (dt != IVL_VT_REAL) { - pform_set_net_range(txt, type, range, signed_flag, dt, rt, 0); - } - } - - delete names; - delete range; - delete attr; -} - /* * This form makes nets with delays and continuous assignments. */ diff --git a/pform.h b/pform.h index 52199eaad..5f08678cd 100644 --- a/pform.h +++ b/pform.h @@ -359,17 +359,6 @@ extern void pform_makewire(const struct vlltype&li, perm_string name, ivl_variable_type_t, std::list*attr); -/* This form handles simple declarations */ -extern void pform_makewire(const struct vlltype&li, - std::list*range, - bool signed_flag, - std::list*names, - NetNet::Type type, - NetNet::PortType, - ivl_variable_type_t, - std::list*attr, - PWSRType rt = SR_NET); - /* This form handles assignment declarations. */ extern void pform_makewire(const struct vlltype&li, std::list*delay, @@ -385,13 +374,6 @@ extern void pform_makewire(const struct vlltype&li, NetNet::Type type, data_type_t*data_type); -/* This form handles nets declared as structures. (See pform_struct_type.cc) */ -extern void pform_makewire(const struct vlltype&li, - struct_type_t*struct_type, - NetNet::PortType, - std::list*names, - std::list*attr); - extern void pform_make_var_init(const struct vlltype&li, perm_string name, PExpr*expr); diff --git a/pform_struct_type.cc b/pform_struct_type.cc index 108b197b6..221722c43 100644 --- a/pform_struct_type.cc +++ b/pform_struct_type.cc @@ -91,32 +91,3 @@ void pform_set_struct_type(const struct vlltype&li, struct_type_t*struct_type, l pform_set_struct_type(li, struct_type, *cur, net_type, attr); } } - -static void pform_makewire(const struct vlltype&li, - struct_type_t*struct_type, - NetNet::PortType ptype, - perm_string name, - list*) -{ - ivl_variable_type_t base_type = struct_type->figure_packed_base_type(); - - PWire*cur = pform_get_make_wire_in_scope(li, name, NetNet::WIRE, ptype, base_type); - assert(cur); - FILE_NAME(cur, li); - cur->set_data_type(struct_type); -} - -void pform_makewire(const struct vlltype&li, - struct_type_t*struct_type, - NetNet::PortType ptype, - list*names, - list*attr) -{ - for (list::iterator cur = names->begin() - ; cur != names->end() ; ++ cur ) { - perm_string txt = *cur; - pform_makewire(li, struct_type, ptype, txt, attr); - } - - delete names; -} From a5e9358d42580b56195621908012c548f5811244 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Thu, 20 Jan 2022 15:57:46 +0100 Subject: [PATCH 2/6] Consolidate pform_makewire() variants There are currently two very similar implementations of pform_makewire(). One that takes a `net_decl_assign_t`, the other a `std::list`. The one that takes a `std::list` is a superset of the other. It can handle both wires and variables, while the other can only handle wires. Update the parser to generate a `std::list` for wire declarations. This allows to remove one of the two functions. Signed-off-by: Lars-Peter Clausen --- parse.y | 24 ++++++++++++------------ pform.cc | 48 ------------------------------------------------ pform.h | 12 ------------ 3 files changed, 12 insertions(+), 72 deletions(-) diff --git a/parse.y b/parse.y index 64fe44da7..2294860a9 100644 --- a/parse.y +++ b/parse.y @@ -439,7 +439,6 @@ static void current_function_set_statement(const YYLTYPE&loc, std::vector*statement_list; - net_decl_assign_t*net_decl_assign; enum_type_t*enum_type; decl_assignment_t*decl_assignment; @@ -610,7 +609,8 @@ static void current_function_set_statement(const YYLTYPE&loc, std::vector list_of_identifiers loop_variables %type list_of_port_identifiers list_of_variable_port_identifiers -%type net_decl_assign net_decl_assigns +%type net_decl_assigns +%type net_decl_assign %type port port_opt port_reference port_reference_list %type port_declaration @@ -5523,10 +5523,9 @@ generate_block net_decl_assign : IDENTIFIER '=' expression - { net_decl_assign_t*tmp = new net_decl_assign_t; - tmp->next = tmp; + { decl_assignment_t*tmp = new decl_assignment_t; tmp->name = lex_strings.make($1); - tmp->expr = $3; + tmp->expr.reset($3); delete[]$1; $$ = tmp; } @@ -5534,14 +5533,15 @@ net_decl_assign net_decl_assigns : net_decl_assigns ',' net_decl_assign - { net_decl_assign_t*tmp = $1; - $3->next = tmp->next; - tmp->next = $3; - $$ = tmp; - } + { std::list*tmp = $1; + tmp->push_back($3); + $$ = tmp; + } | net_decl_assign - { $$ = $1; - } + { std::list*tmp = new std::list; + tmp->push_back($1); + $$ = tmp; + } ; net_type diff --git a/pform.cc b/pform.cc index 21a106c15..fe2cb3d03 100644 --- a/pform.cc +++ b/pform.cc @@ -2823,54 +2823,6 @@ void pform_makewire(const vlltype&li, perm_string name, } } -/* - * This form makes nets with delays and continuous assignments. - */ -void pform_makewire(const vlltype&li, - list*delay, - str_pair_t str, - net_decl_assign_t*decls, - NetNet::Type type, - data_type_t*data_type) -{ - // The decls pointer is a circularly linked list. - net_decl_assign_t*first = decls->next; - - list*names = new list; - - // Go through the circularly linked list non-destructively. - do { - pform_makewire(li, first->name, type, NetNet::NOT_A_PORT, IVL_VT_NO_TYPE, 0); - names->push_back(first->name); - first = first->next; - } while (first != decls->next); - - // The pform_set_data_type function will delete the names list. - pform_set_data_type(li, data_type, names, type, 0); - - // This time, go through the list, deleting cells as I'm done. - first = decls->next; - decls->next = 0; - while (first) { - net_decl_assign_t*next = first->next; - PWire*cur = pform_get_wire_in_scope(first->name); - if (cur != 0) { - PEIdent*lval = new PEIdent(first->name); - FILE_NAME(lval, li.text, li.first_line); - PGAssign*ass = pform_make_pgassign(lval, first->expr, - delay, str); - FILE_NAME(ass, li.text, li.first_line); - } - - delete first; - first = next; - } -} - -/* - * This should eventually replace the form above that takes a - * net_decl_assign_t argument. - */ void pform_makewire(const struct vlltype&li, std::list*delay, str_pair_t str, diff --git a/pform.h b/pform.h index 5f08678cd..d61b18ae5 100644 --- a/pform.h +++ b/pform.h @@ -96,12 +96,6 @@ struct parmvalue_t { struct str_pair_t { ivl_drive_t str0, str1; }; -struct net_decl_assign_t { - perm_string name; - PExpr*expr; - struct net_decl_assign_t*next; -}; - /* The lgate is gate instantiation information. */ struct lgate { explicit inline lgate(int =0) @@ -360,12 +354,6 @@ extern void pform_makewire(const struct vlltype&li, perm_string name, std::list*attr); /* This form handles assignment declarations. */ -extern void pform_makewire(const struct vlltype&li, - std::list*delay, - str_pair_t str, - net_decl_assign_t*assign_list, - NetNet::Type type, - data_type_t*data_type); extern void pform_makewire(const struct vlltype&li, std::list*delay, From 6708c0f6dfd02599898c8098dda3b2dfce763e89 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sat, 22 Jan 2022 09:56:07 +0100 Subject: [PATCH 3/6] pform_makewire(): Allow to specify attributes There are a few places where pform_makewire() is used and attributes can be attached to the created net or variable. At the moment pform_makewire() doesn't allow to specify the attributes, and they either get dropped silently or with a warning. Add support for passing the attributes to pform_makewire() which will then pass it on to pform_set_data_type() to attach it to the declared net or variable. Signed-off-by: Lars-Peter Clausen --- parse.y | 26 +++++++------------------- pform.cc | 5 +++-- pform.h | 3 ++- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/parse.y b/parse.y index 2294860a9..3ab049f4f 100644 --- a/parse.y +++ b/parse.y @@ -1182,7 +1182,7 @@ data_declaration /* IEEE1800-2005: A.2.1.3 */ data_type = new vector_type_t(IVL_VT_LOGIC, false, 0); FILE_NAME(data_type, @2); } - pform_makewire(@2, 0, str_strength, $3, NetNet::IMPLICIT_REG, data_type); + pform_makewire(@2, 0, str_strength, $3, NetNet::IMPLICIT_REG, data_type, $1); } | attribute_list_opt K_event event_variable_list ';' { if ($3) pform_make_events($3, @2.text, @2.first_line); @@ -4987,12 +4987,8 @@ module_item data_type = new vector_type_t(IVL_VT_LOGIC, false, 0); FILE_NAME(data_type, @2); } - pform_makewire(@2, $4, str_strength, $5, $2, data_type); - if ($1) { - yywarn(@2, "Attributes are not supported on net declaration " - "assignments and will be discarded."); - delete $1; - } + pform_makewire(@2, $4, str_strength, $5, $2, data_type, $1); + delete $1; } /* This form doesn't have the range, but does have strengths. This @@ -5004,22 +5000,14 @@ module_item data_type = new vector_type_t(IVL_VT_LOGIC, false, 0); FILE_NAME(data_type, @2); } - pform_makewire(@2, 0, $4, $5, $2, data_type); - if ($1) { - yywarn(@2, "Attributes are not supported on net declaration " - "assignments and will be discarded."); - delete $1; - } + pform_makewire(@2, 0, $4, $5, $2, data_type, $1); + delete $1; } | attribute_list_opt K_wreal net_decl_assigns ';' { real_type_t*data_type = new real_type_t(real_type_t::REAL); - pform_makewire(@2, 0, str_strength, $3, NetNet::WIRE, data_type); - if ($1) { - yywarn(@2, "Attributes are not supported on net declaration " - "assignments and will be discarded."); - delete $1; - } + pform_makewire(@2, 0, str_strength, $3, NetNet::WIRE, data_type, $1); + delete $1; } | K_trireg charge_strength_opt dimensions_opt delay3_opt list_of_identifiers ';' diff --git a/pform.cc b/pform.cc index fe2cb3d03..560ec7a83 100644 --- a/pform.cc +++ b/pform.cc @@ -2828,7 +2828,8 @@ void pform_makewire(const struct vlltype&li, str_pair_t str, std::list*assign_list, NetNet::Type type, - data_type_t*data_type) + data_type_t*data_type, + list*attr) { if (is_compilation_unit(lexical_scope) && !gn_system_verilog()) { VLerror(li, "error: variable declarations must be contained within a module."); @@ -2845,7 +2846,7 @@ void pform_makewire(const struct vlltype&li, names->push_back(curp->name); } - pform_set_data_type(li, data_type, names, type, 0); + pform_set_data_type(li, data_type, names, type, attr); while (! assign_list->empty()) { decl_assignment_t*first = assign_list->front(); diff --git a/pform.h b/pform.h index d61b18ae5..5433f4762 100644 --- a/pform.h +++ b/pform.h @@ -360,7 +360,8 @@ extern void pform_makewire(const struct vlltype&li, str_pair_t str, std::list*assign_list, NetNet::Type type, - data_type_t*data_type); + data_type_t*data_type, + std::list*attr = 0); extern void pform_make_var_init(const struct vlltype&li, perm_string name, PExpr*expr); From 9da057ceb1bcb6658846f9d99e2788fc909edf74 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sat, 22 Jan 2022 17:22:18 +0100 Subject: [PATCH 4/6] Add helper function for creating variable declarations Variables don't have a delay or strength and the NetNet::Type is known. Add a small wrapper around pform_makewire() that can be used to create variables. This will allow to reduce the boilerplate code for variable declarations. Signed-off-by: Lars-Peter Clausen --- parse.y | 2 +- pform.cc | 13 ++++++++++--- pform.h | 5 +++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/parse.y b/parse.y index 3ab049f4f..04c03a647 100644 --- a/parse.y +++ b/parse.y @@ -1660,7 +1660,7 @@ loop_statement /* IEEE1800-2005: A.6.8 */ decl_assignment_t*tmp_assign = new decl_assignment_t; tmp_assign->name = lex_strings.make($4); assign_list.push_back(tmp_assign); - pform_makewire(@4, 0, str_strength, &assign_list, NetNet::REG, $3); + pform_make_var(@4, &assign_list, $3); } statement_or_null { pform_name_t tmp_hident; diff --git a/pform.cc b/pform.cc index 560ec7a83..cd9e7dbb5 100644 --- a/pform.cc +++ b/pform.cc @@ -989,11 +989,18 @@ PCallTask* pform_make_call_task(const struct vlltype&loc, return tmp; } -void pform_make_foreach_declarations(const struct vlltype&loc, - std::list*loop_vars) +void pform_make_var(const struct vlltype&loc, + std::list*assign_list, + data_type_t*data_type, std::list*attr) { static const struct str_pair_t str = { IVL_DR_STRONG, IVL_DR_STRONG }; + pform_makewire(loc, 0, str, assign_list, NetNet::REG, data_type, attr); +} + +void pform_make_foreach_declarations(const struct vlltype&loc, + std::list*loop_vars) +{ listassign_list; for (list::const_iterator cur = loop_vars->begin() ; cur != loop_vars->end() ; ++ cur) { @@ -1002,7 +1009,7 @@ void pform_make_foreach_declarations(const struct vlltype&loc, assign_list.push_back(tmp_assign); } - pform_makewire(loc, 0, str, &assign_list, NetNet::REG, &size_type); + pform_make_var(loc, &assign_list, &size_type); } PForeach* pform_make_foreach(const struct vlltype&loc, diff --git a/pform.h b/pform.h index 5433f4762..87720ca63 100644 --- a/pform.h +++ b/pform.h @@ -363,6 +363,11 @@ extern void pform_makewire(const struct vlltype&li, data_type_t*data_type, std::list*attr = 0); +extern void pform_make_var(const struct vlltype&loc, + std::list*assign_list, + data_type_t*data_type, + std::list*attr = 0); + extern void pform_make_var_init(const struct vlltype&li, perm_string name, PExpr*expr); From f6394c5fe6275286a7d2c28c9a6aa27cb111d33d Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sat, 22 Jan 2022 17:15:34 +0100 Subject: [PATCH 5/6] Consolidate variable declaration parsing rules There are currently two rules for parsing variable declarations. One that is used when declaring variables in as a block declaration item and another that is use everywhere else. Consolidate those into a single set of rules. This removes a fair bit of duplicated code in the parser. A side effect of this refactoring is that class new statements can be used as variable initializers as allowed by the standard. E.g. ``` module test; class C; endlcass C c = new C; endmodule ``` This previously was not supported for block item variable declarations. Signed-off-by: Lars-Peter Clausen --- parse.y | 123 +++++++++++++------------------------------------------- 1 file changed, 29 insertions(+), 94 deletions(-) diff --git a/parse.y b/parse.y index 04c03a647..90a7966f5 100644 --- a/parse.y +++ b/parse.y @@ -603,9 +603,9 @@ static void current_function_set_statement(const YYLTYPE&loc, std::vector udp_initial udp_init_opt %type udp_initial_expr_opt -%type register_variable net_variable event_variable label_opt class_declaration_endlabel_opt +%type net_variable event_variable label_opt class_declaration_endlabel_opt %type block_identifier_opt -%type register_variable_list net_variable_list event_variable_list +%type net_variable_list event_variable_list %type list_of_identifiers loop_variables %type list_of_port_identifiers list_of_variable_port_identifiers @@ -645,6 +645,7 @@ static void current_function_set_statement(const YYLTYPE&loc, std::vector assignment_pattern expression expr_mintypmax %type expr_primary_or_typename expr_primary %type class_new dynamic_array_new let_default_opt +%type var_decl_initializer_opt %type inc_or_dec_expression inside_expression lpvalue %type branch_probe_expression streaming_concatenation %type delay_value delay_value_simple @@ -1767,7 +1768,6 @@ loop_statement /* IEEE1800-2005: A.6.8 */ ; -/* TODO: Replace register_variable_list with list_of_variable_decl_assignments. */ list_of_variable_decl_assignments /* IEEE1800-2005 A.2.3 */ : variable_decl_assignment { std::list*tmp = new std::list; @@ -1781,37 +1781,29 @@ list_of_variable_decl_assignments /* IEEE1800-2005 A.2.3 */ } ; +var_decl_initializer_opt + : '=' expression { $$ = $2; } + | '=' class_new { $$ = $2; } + | '=' dynamic_array_new { $$ = $2; } + | { $$ = 0; } + ; + variable_decl_assignment /* IEEE1800-2005 A.2.3 */ - : IDENTIFIER dimensions_opt - { decl_assignment_t*tmp = new decl_assignment_t; + : IDENTIFIER dimensions_opt var_decl_initializer_opt + { if ($3 && pform_peek_scope()->var_init_needs_explicit_lifetime() + && (var_lifetime == LexicalScope::INHERITED)) { + cerr << @1 << ": warning: Static variable initialization requires " + "explicit lifetime in this context." << endl; + warn_count += 1; + } + + decl_assignment_t*tmp = new decl_assignment_t; tmp->name = lex_strings.make($1); if ($2) { tmp->index = *$2; delete $2; } - delete[]$1; - $$ = tmp; - } - | IDENTIFIER '=' expression - { decl_assignment_t*tmp = new decl_assignment_t; - tmp->name = lex_strings.make($1); - tmp->expr .reset($3); - delete[]$1; - $$ = tmp; - } - | IDENTIFIER '=' class_new - { decl_assignment_t*tmp = new decl_assignment_t; - tmp->name = lex_strings.make($1); - tmp->expr .reset($3); - delete[]$1; - $$ = tmp; - } - | IDENTIFIER dimensions '=' dynamic_array_new - { decl_assignment_t*tmp = new decl_assignment_t; - tmp->name = lex_strings.make($1); - tmp->index = *$2; - tmp->expr .reset($4); - delete $2; + tmp->expr.reset($3); delete[]$1; $$ = tmp; } @@ -2682,21 +2674,22 @@ block_item_decl /* variable declarations. Note that data_type can be 0 if we are recovering from an error. */ - : data_type register_variable_list ';' - { if ($1) pform_set_data_type(@1, $1, $2, NetNet::REG, attributes_in_context); + : data_type list_of_variable_decl_assignments ';' + { if ($1) pform_make_var(@1, $2, $1, attributes_in_context); } - | variable_lifetime data_type register_variable_list ';' - { if ($2) pform_set_data_type(@2, $2, $3, NetNet::REG, attributes_in_context); + | variable_lifetime data_type list_of_variable_decl_assignments ';' + { if ($2) pform_make_var(@2, $3, $2, attributes_in_context); var_lifetime = LexicalScope::INHERITED; } - | K_reg data_type register_variable_list ';' - { if ($2) pform_set_data_type(@2, $2, $3, NetNet::REG, attributes_in_context); + /* The extra `reg` is not valid (System)Verilog, this is a iverilog extension. */ + | K_reg data_type list_of_variable_decl_assignments ';' + { if ($2) pform_make_var(@2, $3, $2, attributes_in_context); } - | variable_lifetime K_reg data_type register_variable_list ';' - { if ($3) pform_set_data_type(@3, $3, $4, NetNet::REG, attributes_in_context); + | variable_lifetime K_reg data_type list_of_variable_decl_assignments ';' + { if ($3) pform_make_var(@3, $4, $3, attributes_in_context); var_lifetime = LexicalScope::INHERITED; } @@ -5968,64 +5961,6 @@ dimensions } ; - /* The register_variable rule is matched only when I am parsing - variables in a "reg" definition. I therefore know that I am - creating registers and I do not need to let the containing rule - handle it. The register variable list simply packs them together - so that bit ranges can be assigned. */ -register_variable - : IDENTIFIER dimensions_opt - { perm_string name = lex_strings.make($1); - pform_makewire(@1, name, NetNet::REG, - NetNet::NOT_A_PORT, IVL_VT_NO_TYPE, 0); - pform_set_reg_idx(name, $2); - $$ = $1; - } - | IDENTIFIER dimensions_opt '=' expression - { if (pform_peek_scope()->var_init_needs_explicit_lifetime() - && (var_lifetime == LexicalScope::INHERITED)) { - cerr << @3 << ": warning: Static variable initialization requires " - "explicit lifetime in this context." << endl; - warn_count += 1; - } - perm_string name = lex_strings.make($1); - pform_makewire(@1, name, NetNet::REG, - NetNet::NOT_A_PORT, IVL_VT_NO_TYPE, 0); - pform_set_reg_idx(name, $2); - pform_make_var_init(@1, name, $4); - $$ = $1; - } - | IDENTIFIER dimensions_opt '=' dynamic_array_new - { if (pform_peek_scope()->var_init_needs_explicit_lifetime() - && (var_lifetime == LexicalScope::INHERITED)) { - cerr << @3 << ": warning: Static variable initialization requires " - "explicit lifetime in this context." << endl; - warn_count += 1; - } - perm_string name = lex_strings.make($1); - pform_makewire(@1, name, NetNet::REG, - NetNet::NOT_A_PORT, IVL_VT_NO_TYPE, 0); - pform_set_reg_idx(name, $2); - pform_make_var_init(@1, name, $4); - $$ = $1; - } - ; - -register_variable_list - : register_variable - { std::list*tmp = new std::list; - tmp->push_back(lex_strings.make($1)); - $$ = tmp; - delete[]$1; - } - | register_variable_list ',' register_variable - { std::list*tmp = $1; - tmp->push_back(lex_strings.make($3)); - $$ = tmp; - delete[]$3; - } - ; - net_variable : IDENTIFIER dimensions_opt { perm_string name = lex_strings.make($1); From ce8ee4261906c1967fa41ead1d19ada6ee3b6815 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Fri, 18 Feb 2022 11:01:29 +0100 Subject: [PATCH 6/6] Add regression test for class new initializer Check that it is possible to use a class new as an initializer for a variable or property declaration. Signed-off-by: Lars-Peter Clausen --- ivtest/ivltests/sv_class_new_init.v | 29 +++++++++++++++++++++++++++++ ivtest/regress-sv.list | 1 + ivtest/regress-vlog95.list | 1 + 3 files changed, 31 insertions(+) create mode 100644 ivtest/ivltests/sv_class_new_init.v diff --git a/ivtest/ivltests/sv_class_new_init.v b/ivtest/ivltests/sv_class_new_init.v new file mode 100644 index 000000000..7ff5cbb0f --- /dev/null +++ b/ivtest/ivltests/sv_class_new_init.v @@ -0,0 +1,29 @@ +// Check that the class new initializer can be used for all sorts for variable +// declarations + +package P; + class C; + endclass + C c = new; +endpackage + +module test; + + class C; + task check; + $display("PASSED"); + endtask + endclass + + class D; + C c = new; + endclass + + C c = new; + + initial begin + static C c = new; + c.check(); + end + +endmodule diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index b0e865eb5..b16e8b7fe 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -433,6 +433,7 @@ sv_class22 normal,-g2009 ivltests sv_class23 normal,-g2009 ivltests sv_class24 normal,-g2009 ivltests sv_class_extends_scoped normal,-g2009 ivltests +sv_class_new_init normal,-g2009 ivltests sv_darray1 normal,-g2009 ivltests sv_darray2 normal,-g2009 ivltests sv_darray3 normal,-g2009 ivltests diff --git a/ivtest/regress-vlog95.list b/ivtest/regress-vlog95.list index 069831104..1c66d40f6 100644 --- a/ivtest/regress-vlog95.list +++ b/ivtest/regress-vlog95.list @@ -364,6 +364,7 @@ sv_class22 CE,-g2009 ivltests sv_class23 CE,-g2009 ivltests sv_class24 CE,-g2009 ivltests sv_class_extends_scoped CE,-g2009 ivltests +sv_class_new_init CE,-g2009 ivltests sv_end_label CE,-g2009 ivltests # Also generate sv_foreach2 CE,-g2009,-pallowsigned=1 ivltests sv_foreach3 CE,-g2009 ivltests