18
18
#include < fstream>
19
19
#include < algorithm>
20
20
#include < string.h>
21
+ #include < type_traits>
21
22
22
23
#include < util/invariant.h>
23
24
#include < util/std_types.h>
@@ -393,7 +394,7 @@ void interpretert::execute_other()
393
394
mp_vectort tmp, rhs;
394
395
evaluate (pc->code .op1 (), tmp);
395
396
mp_integer address=evaluate_address (pc->code .op0 ());
396
- auto size=get_size (pc->code .op0 ().type ());
397
+ const auto size=get_size (pc->code .op0 ().type ());
397
398
while (rhs.size ()<size) rhs.insert (rhs.end (), tmp.begin (), tmp.end ());
398
399
if (size!=rhs.size ())
399
400
error () << " !! failed to obtain rhs (" << rhs.size () << " vs. "
@@ -434,7 +435,7 @@ irep_idt interpretert::get_component_id(
434
435
{
435
436
if (offset<=0 )
436
437
return it->id ();
437
- auto size=get_size (it->type ());
438
+ const auto size=get_size (it->type ());
438
439
offset-=size;
439
440
}
440
441
return object;
@@ -453,7 +454,7 @@ typet interpretert::get_type(const irep_idt &id) const
453
454
// / type
454
455
exprt interpretert::get_value (
455
456
const typet &type,
456
- uint64_t offset,
457
+ mp_integer offset,
457
458
bool use_non_det)
458
459
{
459
460
const typet real_type=ns.follow (type);
@@ -468,7 +469,7 @@ exprt interpretert::get_value(
468
469
for (struct_typet::componentst::const_iterator it=components.begin ();
469
470
it!=components.end (); it++)
470
471
{
471
- auto size=get_size (it->type ());
472
+ const auto size=get_size (it->type ());
472
473
const exprt operand=get_value (it->type (), offset);
473
474
offset+=size;
474
475
result.copy_to_operands (operand);
@@ -480,8 +481,8 @@ exprt interpretert::get_value(
480
481
// Get size of array
481
482
exprt result=array_exprt (to_array_type (real_type));
482
483
const exprt &size_expr=static_cast <const exprt &>(type.find (ID_size));
483
- auto subtype_size=get_size (type.subtype ());
484
- std:: size_t count;
484
+ const auto subtype_size=get_size (type.subtype ());
485
+ mp_integer count= 0 ;
485
486
if (size_expr.id ()!=ID_constant)
486
487
{
487
488
count=base_address_to_actual_size (offset)/subtype_size;
@@ -490,12 +491,12 @@ exprt interpretert::get_value(
490
491
{
491
492
mp_integer mp_count;
492
493
to_integer (size_expr, mp_count);
493
- count=integer2size_t ( mp_count) ;
494
+ count=mp_count;
494
495
}
495
496
496
497
// Retrieve the value for each member in the array
497
- result.reserve_operands (count);
498
- for (unsigned i=0 ; i<count; i++ )
498
+ result.reserve_operands (integer2size_t ( count) );
499
+ for (decltype (count) i=0 ; i<count; ++i )
499
500
{
500
501
const exprt operand=get_value (
501
502
type.subtype (),
@@ -518,7 +519,7 @@ exprt interpretert::get_value(
518
519
exprt interpretert::get_value (
519
520
const typet &type,
520
521
mp_vectort &rhs,
521
- uint64_t offset)
522
+ mp_integer offset)
522
523
{
523
524
const typet real_type=ns.follow (type);
524
525
PRECONDITION (!rhs.empty ());
@@ -533,7 +534,7 @@ exprt interpretert::get_value(
533
534
result.reserve_operands (components.size ());
534
535
for (const struct_union_typet::componentt &expr : components)
535
536
{
536
- auto size=get_size (expr.type ());
537
+ const auto size=get_size (expr.type ());
537
538
const exprt operand=get_value (expr.type (), rhs, offset);
538
539
offset+=size;
539
540
result.copy_to_operands (operand);
@@ -546,8 +547,8 @@ exprt interpretert::get_value(
546
547
const exprt &size_expr=static_cast <const exprt &>(type.find (ID_size));
547
548
548
549
// Get size of array
549
- auto subtype_size=get_size (type.subtype ());
550
- unsigned count;
550
+ const auto subtype_size=get_size (type.subtype ());
551
+ mp_integer count;
551
552
if (unbounded_size (type))
552
553
{
553
554
count=base_address_to_actual_size (offset)/subtype_size;
@@ -556,12 +557,12 @@ exprt interpretert::get_value(
556
557
{
557
558
mp_integer mp_count;
558
559
to_integer (size_expr, mp_count);
559
- count=integer2unsigned ( mp_count) ;
560
+ count=mp_count;
560
561
}
561
562
562
563
// Retrieve the value for each member in the array
563
- result.reserve_operands (count);
564
- for (unsigned i=0 ; i<count; i++ )
564
+ result.reserve_operands (integer2size_t ( count) );
565
+ for (std::remove_const< decltype (count)>::type i=0 ; i<count; ++i )
565
566
{
566
567
const exprt operand=get_value (type.subtype (), rhs,
567
568
offset+i*subtype_size);
@@ -572,41 +573,41 @@ exprt interpretert::get_value(
572
573
else if (real_type.id ()==ID_floatbv)
573
574
{
574
575
ieee_floatt f (to_floatbv_type (type));
575
- f.unpack (rhs[offset]);
576
+ f.unpack (rhs[integer2size_t ( offset) ]);
576
577
return f.to_expr ();
577
578
}
578
579
else if (real_type.id ()==ID_fixedbv)
579
580
{
580
581
fixedbvt f;
581
- f.from_integer (rhs[offset]);
582
+ f.from_integer (rhs[integer2size_t ( offset) ]);
582
583
return f.to_expr ();
583
584
}
584
585
else if (real_type.id ()==ID_bool)
585
586
{
586
- if (rhs[offset]!=0 )
587
+ if (rhs[integer2size_t ( offset) ]!=0 )
587
588
return true_exprt ();
588
589
else
589
590
false_exprt ();
590
591
}
591
592
else if (real_type.id ()==ID_c_bool)
592
593
{
593
- return from_integer (rhs[offset]!=0 ?1 :0 , type);
594
+ return from_integer (rhs[integer2size_t ( offset) ]!=0 ?1 :0 , type);
594
595
}
595
596
else if ((real_type.id ()==ID_pointer) || (real_type.id ()==ID_address_of))
596
597
{
597
- if (rhs[offset]==0 )
598
+ if (rhs[integer2size_t ( offset) ]==0 )
598
599
{
599
600
// NULL pointer
600
601
constant_exprt result (type);
601
602
result.set_value (ID_NULL);
602
603
return result;
603
604
}
604
- if (rhs[offset]<memory.size ())
605
+ if (rhs[integer2size_t ( offset) ]<memory.size ())
605
606
{
606
607
// We want the symbol pointed to
607
- std:: size_t address=integer2size_t ( rhs[offset]) ;
608
+ const auto address=rhs[integer2size_t ( offset)] ;
608
609
irep_idt identifier=address_to_identifier (address);
609
- auto offset=address_to_offset (address);
610
+ const auto offset=address_to_offset (address);
610
611
const typet type=get_type (identifier);
611
612
exprt symbol_expr (ID_symbol, type);
612
613
symbol_expr.set (ID_identifier, identifier);
@@ -625,19 +626,19 @@ exprt interpretert::get_value(
625
626
return index_expr;
626
627
}
627
628
628
- error () << " interpreter: invalid pointer " << rhs[offset]
629
+ error () << " interpreter: invalid pointer " << rhs[integer2size_t ( offset) ]
629
630
<< " > object count " << memory.size () << eom;
630
631
throw " interpreter: reading from invalid pointer" ;
631
632
}
632
633
else if (real_type.id ()==ID_string)
633
634
{
634
635
// Strings are currently encoded by their irep_idt ID.
635
636
return constant_exprt (
636
- irep_idt::make_from_table_index (rhs[offset].to_long ()),
637
+ irep_idt::make_from_table_index (rhs[integer2size_t ( offset) ].to_long ()),
637
638
type);
638
639
}
639
640
// Retrieve value of basic data type
640
- return from_integer (rhs[offset], type);
641
+ return from_integer (rhs[integer2size_t ( offset) ], type);
641
642
}
642
643
643
644
// / executes the assign statement at the current pc value
@@ -652,7 +653,7 @@ void interpretert::execute_assign()
652
653
if (!rhs.empty ())
653
654
{
654
655
mp_integer address=evaluate_address (code_assign.lhs ());
655
- auto size=get_size (code_assign.lhs ().type ());
656
+ const auto size=get_size (code_assign.lhs ().type ());
656
657
657
658
if (size!=rhs.size ())
658
659
error () << " !! failed to obtain rhs ("
@@ -680,9 +681,9 @@ void interpretert::execute_assign()
680
681
side_effect_exprt side_effect=to_side_effect_expr (code_assign.rhs ());
681
682
if (side_effect.get_statement ()==ID_nondet)
682
683
{
683
- unsigned address=integer2unsigned ( evaluate_address (code_assign.lhs () ));
684
- auto size=get_size (code_assign.lhs ().type ());
685
- for (size_t i=0 ; i<size; i++ )
684
+ const auto address=evaluate_address (code_assign.lhs ());
685
+ const auto size=get_size (code_assign.lhs ().type ());
686
+ for (std::remove_const< decltype (size)>::type i=0 ; i<size; ++i )
686
687
{
687
688
memory[address+i].initialized =
688
689
memory_cellt::initializedt::READ_BEFORE_WRITTEN;
@@ -700,7 +701,7 @@ void interpretert::assign(
700
701
{
701
702
if ((address+i)<memory.size ())
702
703
{
703
- std:: size_t address_val=integer2size_t ( address+i) ;
704
+ const auto address_val=address+i;
704
705
memory_cellt &cell=memory[address_val];
705
706
if (show)
706
707
{
@@ -750,7 +751,7 @@ void interpretert::execute_function_call()
750
751
// Retrieve the empty last trace step struct we pushed for this step
751
752
// of the interpreter run to fill it with the corresponding data
752
753
goto_trace_stept &trace_step=steps.get_last_step ();
753
- std:: size_t address=integer2size_t (a) ;
754
+ const auto address=a ;
754
755
#if 0
755
756
const memory_cellt &cell=memory[address];
756
757
#endif
@@ -799,7 +800,7 @@ void interpretert::execute_function_call()
799
800
for (const auto &id : locals)
800
801
{
801
802
const symbolt &symbol=ns.lookup (id);
802
- frame.local_map [id]=integer2unsigned ( build_memory_map (id, symbol.type ) );
803
+ frame.local_map [id]=build_memory_map (id, symbol.type );
803
804
}
804
805
805
806
// assign the arguments
@@ -863,7 +864,7 @@ void interpretert::build_memory_map()
863
864
864
865
void interpretert::build_memory_map (const symbolt &symbol)
865
866
{
866
- uint64_t size=0 ;
867
+ mp_integer size=0 ;
867
868
868
869
if (symbol.type .id ()==ID_code)
869
870
{
@@ -876,7 +877,7 @@ void interpretert::build_memory_map(const symbolt &symbol)
876
877
877
878
if (size!=0 )
878
879
{
879
- auto address=memory.size ();
880
+ const auto address=memory.size ();
880
881
memory.resize (address+size);
881
882
memory_map[symbol.name ]=address;
882
883
inverse_memory_map[address]=symbol.name ;
@@ -917,7 +918,7 @@ mp_integer interpretert::build_memory_map(
917
918
{
918
919
typet alloc_type=concretize_type (type);
919
920
auto size=get_size (alloc_type);
920
- auto it=dynamic_types.find (id);
921
+ const auto it=dynamic_types.find (id);
921
922
922
923
if (it!=dynamic_types.end ())
923
924
{
@@ -966,7 +967,7 @@ bool interpretert::unbounded_size(const typet &type)
966
967
// / get allocated 2^32 address space each (of a 2^64 sized space).
967
968
// / \param type: a structured type
968
969
// / \return Size of the given type
969
- uint64_t interpretert::get_size (const typet &type)
970
+ mp_integer interpretert::get_size (const typet &type)
970
971
{
971
972
if (unbounded_size (type))
972
973
return 2ULL << 32ULL ;
@@ -976,7 +977,7 @@ uint64_t interpretert::get_size(const typet &type)
976
977
const struct_typet::componentst &components=
977
978
to_struct_type (type).components ();
978
979
979
- uint64_t sum=0 ;
980
+ mp_integer sum=0 ;
980
981
981
982
for (const auto &comp : components)
982
983
{
@@ -993,7 +994,7 @@ uint64_t interpretert::get_size(const typet &type)
993
994
const union_typet::componentst &components=
994
995
to_union_type (type).components ();
995
996
996
- uint64_t max_size=0 ;
997
+ mp_integer max_size=0 ;
997
998
998
999
for (const auto &comp : components)
999
1000
{
@@ -1009,7 +1010,7 @@ uint64_t interpretert::get_size(const typet &type)
1009
1010
{
1010
1011
const exprt &size_expr=static_cast <const exprt &>(type.find (ID_size));
1011
1012
1012
- size_t subtype_size=get_size (type.subtype ());
1013
+ const auto subtype_size=get_size (type.subtype ());
1013
1014
1014
1015
mp_vectort i;
1015
1016
evaluate (size_expr, i);
@@ -1021,7 +1022,7 @@ uint64_t interpretert::get_size(const typet &type)
1021
1022
mp_integer size_mp;
1022
1023
bool ret=to_integer (size_const, size_mp);
1023
1024
CHECK_RETURN (!ret);
1024
- return subtype_size*integer2unsigned ( size_mp) ;
1025
+ return subtype_size*size_mp;
1025
1026
}
1026
1027
return subtype_size;
1027
1028
}
@@ -1037,7 +1038,7 @@ exprt interpretert::get_value(const irep_idt &id)
1037
1038
// The dynamic type and the static symbol type may differ for VLAs,
1038
1039
// where the symbol carries a size expression and the dynamic type
1039
1040
// registry contains its actual length.
1040
- auto findit=dynamic_types.find (id);
1041
+ const auto findit=dynamic_types.find (id);
1041
1042
typet get_type;
1042
1043
if (findit!=dynamic_types.end ())
1043
1044
get_type=findit->second ;
@@ -1047,7 +1048,7 @@ exprt interpretert::get_value(const irep_idt &id)
1047
1048
symbol_exprt symbol_expr (id, get_type);
1048
1049
mp_integer whole_lhs_object_address=evaluate_address (symbol_expr);
1049
1050
1050
- return get_value (get_type, integer2size_t ( whole_lhs_object_address) );
1051
+ return get_value (get_type, whole_lhs_object_address);
1051
1052
}
1052
1053
1053
1054
void interpreter (
0 commit comments