@@ -102,9 +102,8 @@ void verilog_typecheckt::collect_symbols(const typet &type)
102102 if (enum_type.has_base_type ())
103103 collect_symbols (enum_type.base_type ());
104104
105- // The default base type is 'int'.
106- auto base_type =
107- enum_type.has_base_type () ? enum_type.base_type () : signedbv_typet (32 );
105+ // convert the type now
106+ auto converted_type = convert_type (enum_type);
108107
109108 // Add the enum names to the symbol table for subsequent elaboration.
110109 // Values are given, or the previous plus one, starting with value '0'.
@@ -113,13 +112,17 @@ void verilog_typecheckt::collect_symbols(const typet &type)
113112 for (auto &enum_name : enum_type.enum_names ())
114113 {
115114 if (enum_name.value ().is_not_nil ())
116- initializer = enum_name.value ();
115+ {
116+ exprt tmp = enum_name.value ();
117+ convert_expr (tmp);
118+ initializer = std::move (tmp);
119+ }
117120
118- exprt value = typecast_exprt (initializer, base_type );
121+ exprt value = typecast_exprt (initializer, converted_type );
119122
120123 const auto base_name = enum_name.base_name ();
121124 const auto identifier = hierarchical_identifier (base_name);
122- symbolt enum_name_symbol (identifier, base_type , mode);
125+ symbolt enum_name_symbol (identifier, converted_type , mode);
123126 enum_name_symbol.module = module_identifier;
124127 enum_name_symbol.base_name = base_name;
125128 enum_name_symbol.value = std::move (value);
@@ -128,8 +131,8 @@ void verilog_typecheckt::collect_symbols(const typet &type)
128131 add_symbol (std::move (enum_name_symbol));
129132
130133 initializer = plus_exprt (
131- typecast_exprt (initializer, base_type ),
132- typecast_exprt (from_integer (1 , integer_typet ()), base_type ));
134+ typecast_exprt (initializer, converted_type ),
135+ typecast_exprt (from_integer (1 , integer_typet ()), converted_type ));
133136 }
134137 }
135138}
0 commit comments