@@ -348,10 +348,18 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
348
348
CHECK_RETURN (bv.size ()==bits);
349
349
350
350
typet pointer_sub_type=it->type ().subtype ();
351
+
351
352
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
+ }
355
363
}
356
364
}
357
365
@@ -423,10 +431,19 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
423
431
bv=convert_bv (expr.op0 ());
424
432
425
433
typet pointer_sub_type=expr.op0 ().type ().subtype ();
434
+ mp_integer element_size;
435
+
426
436
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
+ }
430
447
431
448
offset_arithmetic (bv, element_size, neg_op1);
432
449
@@ -488,10 +505,19 @@ bvt bv_pointerst::convert_bitvector(const exprt &expr)
488
505
bvt bv=bv_utils.sub (op0, op1);
489
506
490
507
typet pointer_sub_type=expr.op0 ().type ().subtype ();
508
+ mp_integer element_size;
509
+
491
510
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
+ }
495
521
496
522
if (element_size!=1 )
497
523
{
0 commit comments