@@ -136,15 +136,15 @@ bool bv_pointerst::convert_address_of_rec(
136136 {
137137 // this should be gone
138138 bv=convert_pointer_type (array);
139- POSTCONDITION (bv.size ()==bits);
139+ CHECK_RETURN (bv.size ()==bits);
140140 }
141141 else if (array_type.id ()==ID_array ||
142142 array_type.id ()==ID_incomplete_array ||
143143 array_type.id ()==ID_string_constant)
144144 {
145145 if (convert_address_of_rec (array, bv))
146146 return true ;
147- POSTCONDITION (bv.size ()==bits);
147+ CHECK_RETURN (bv.size ()==bits);
148148 }
149149 else
150150 UNREACHABLE;
@@ -155,7 +155,22 @@ bool bv_pointerst::convert_address_of_rec(
155155 DATA_INVARIANT (size>0 , " array subtype expected to have non-zero size" );
156156
157157 offset_arithmetic (bv, size, index);
158- POSTCONDITION (bv.size ()==bits);
158+ CHECK_RETURN (bv.size ()==bits);
159+ return false ;
160+ }
161+ else if (expr.id ()==ID_byte_extract_little_endian ||
162+ expr.id ()==ID_byte_extract_big_endian)
163+ {
164+ const auto &byte_extract_expr=to_byte_extract_expr (expr);
165+
166+ // recursive call
167+ if (convert_address_of_rec (byte_extract_expr.op (), bv))
168+ return true ;
169+
170+ CHECK_RETURN (bv.size ()==bits);
171+
172+ offset_arithmetic (bv, 1 , byte_extract_expr.offset ());
173+ CHECK_RETURN (bv.size ()==bits);
159174 return false ;
160175 }
161176 else if (expr.id ()==ID_member)
@@ -296,7 +311,7 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
296311 return bv;
297312 }
298313
299- POSTCONDITION (bv.size ()==bits);
314+ CHECK_RETURN (bv.size ()==bits);
300315 return bv;
301316 }
302317 else if (expr.id ()==ID_constant)
@@ -334,13 +349,13 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
334349 {
335350 count++;
336351 bv=convert_bv (*it);
337- POSTCONDITION (bv.size ()==bits);
352+ CHECK_RETURN (bv.size ()==bits);
338353
339354 typet pointer_sub_type=it->type ().subtype ();
340355 if (pointer_sub_type.id ()==ID_empty)
341356 pointer_sub_type=char_type ();
342357 size=pointer_offset_size (pointer_sub_type, ns);
343- POSTCONDITION (size>0 );
358+ CHECK_RETURN (size>0 );
344359 }
345360 }
346361
0 commit comments