@@ -11,6 +11,7 @@ Author: Daniel Kroening, kroening@kroening.com
1111#include < algorithm>
1212
1313#include < util/arith_tools.h>
14+ #include < util/exception_utils.h>
1415#include < util/invariant.h>
1516#include < util/std_types.h>
1617
@@ -79,39 +80,35 @@ const boolbv_widtht::entryt &boolbv_widtht::get_entry(const typet &type) const
7980 else if (type_id==ID_c_bool)
8081 {
8182 entry.total_width =to_c_bool_type (type).get_width ();
82- assert (entry.total_width !=0 );
8383 }
8484 else if (type_id==ID_signedbv)
8585 {
8686 entry.total_width =to_signedbv_type (type).get_width ();
87- assert (entry.total_width !=0 );
8887 }
8988 else if (type_id==ID_unsignedbv)
9089 {
9190 entry.total_width =to_unsignedbv_type (type).get_width ();
92- assert (entry.total_width !=0 );
9391 }
9492 else if (type_id==ID_floatbv)
9593 {
9694 entry.total_width =to_floatbv_type (type).get_width ();
97- assert (entry.total_width !=0 );
9895 }
9996 else if (type_id==ID_fixedbv)
10097 {
10198 entry.total_width =to_fixedbv_type (type).get_width ();
102- assert (entry.total_width !=0 );
10399 }
104100 else if (type_id==ID_bv)
105101 {
106102 entry.total_width =to_bv_type (type).get_width ();
107- assert (entry.total_width !=0 );
108103 }
109104 else if (type_id==ID_verilog_signedbv ||
110105 type_id==ID_verilog_unsignedbv)
111106 {
112107 // we encode with two bits
113- entry.total_width = type.get_size_t (ID_width) * 2 ;
114- assert (entry.total_width !=0 );
108+ std::size_t size = type.get_size_t (ID_width);
109+ DATA_INVARIANT (
110+ size > 0 , " verilog bitvector width shall be greater than zero" );
111+ entry.total_width = size * 2 ;
115112 }
116113 else if (type_id==ID_range)
117114 {
@@ -123,7 +120,7 @@ const boolbv_widtht::entryt &boolbv_widtht::get_entry(const typet &type) const
123120 if (size>=1 )
124121 {
125122 entry.total_width = address_bits (size);
126- assert (entry.total_width != 0 );
123+ CHECK_RETURN (entry.total_width > 0 );
127124 }
128125 }
129126 else if (type_id==ID_array)
@@ -142,7 +139,7 @@ const boolbv_widtht::entryt &boolbv_widtht::get_entry(const typet &type) const
142139 {
143140 mp_integer total=array_size*sub_width;
144141 if (total>(1 <<30 )) // realistic limit
145- throw " array too large for flattening" ;
142+ throw analysis_exceptiont ( " array too large for flattening" ) ;
146143
147144 entry.total_width =integer2unsigned (total);
148145 }
@@ -163,7 +160,7 @@ const boolbv_widtht::entryt &boolbv_widtht::get_entry(const typet &type) const
163160 {
164161 mp_integer total=vector_size*sub_width;
165162 if (total>(1 <<30 )) // realistic limit
166- throw " vector too large for flattening" ;
163+ analysis_exceptiont ( " vector too large for flattening" ) ;
167164
168165 entry.total_width =integer2unsigned (vector_size*sub_width);
169166 }
@@ -181,13 +178,13 @@ const boolbv_widtht::entryt &boolbv_widtht::get_entry(const typet &type) const
181178 // get number of necessary bits
182179 std::size_t size=to_enumeration_type (type).elements ().size ();
183180 entry.total_width = address_bits (size);
184- assert (entry.total_width != 0 );
181+ CHECK_RETURN (entry.total_width > 0 );
185182 }
186183 else if (type_id==ID_c_enum)
187184 {
188185 // these have a subtype
189186 entry.total_width = type.subtype ().get_size_t (ID_width);
190- assert (entry.total_width != 0 );
187+ CHECK_RETURN (entry.total_width > 0 );
191188 }
192189 else if (type_id==ID_incomplete_c_enum)
193190 {
0 commit comments