@@ -348,10 +348,18 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
348348 CHECK_RETURN (bv.size ()==bits);
349349
350350 typet pointer_sub_type=it->type ().subtype ();
351+
351352 if (pointer_sub_type.id ()==ID_empty)
352- pointer_sub_type=char_type ();
353- size=pointer_offset_size (pointer_sub_type, ns);
354- CHECK_RETURN (size>0 );
353+ {
354+ // This is a gcc extension.
355+ // https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
356+ size = 1 ;
357+ }
358+ else
359+ {
360+ size = pointer_offset_size (pointer_sub_type, ns);
361+ CHECK_RETURN (size > 0 );
362+ }
355363 }
356364 }
357365
@@ -423,10 +431,19 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
423431 bv=convert_bv (expr.op0 ());
424432
425433 typet pointer_sub_type=expr.op0 ().type ().subtype ();
434+ mp_integer element_size;
435+
426436 if (pointer_sub_type.id ()==ID_empty)
427- pointer_sub_type=char_type ();
428- mp_integer element_size=pointer_offset_size (pointer_sub_type, ns);
429- DATA_INVARIANT (element_size>0 , " object size expected to be positive" );
437+ {
438+ // This is a gcc extension.
439+ // https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
440+ element_size = 1 ;
441+ }
442+ else
443+ {
444+ element_size = pointer_offset_size (pointer_sub_type, ns);
445+ DATA_INVARIANT (element_size > 0 , " object size expected to be positive" );
446+ }
430447
431448 offset_arithmetic (bv, element_size, neg_op1);
432449
@@ -488,10 +505,19 @@ bvt bv_pointerst::convert_bitvector(const exprt &expr)
488505 bvt bv=bv_utils.sub (op0, op1);
489506
490507 typet pointer_sub_type=expr.op0 ().type ().subtype ();
508+ mp_integer element_size;
509+
491510 if (pointer_sub_type.id ()==ID_empty)
492- pointer_sub_type=char_type ();
493- mp_integer element_size=pointer_offset_size (pointer_sub_type, ns);
494- DATA_INVARIANT (element_size>0 , " object size expected to be positive" );
511+ {
512+ // This is a gcc extension.
513+ // https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
514+ element_size = 1 ;
515+ }
516+ else
517+ {
518+ element_size = pointer_offset_size (pointer_sub_type, ns);
519+ DATA_INVARIANT (element_size > 0 , " object size expected to be positive" );
520+ }
495521
496522 if (element_size!=1 )
497523 {
0 commit comments