File tree Expand file tree Collapse file tree 3 files changed +23
-13
lines changed Expand file tree Collapse file tree 3 files changed +23
-13
lines changed Original file line number Diff line number Diff line change @@ -503,7 +503,9 @@ exprt interpretert::get_value(
503
503
}
504
504
return result;
505
505
}
506
- if (use_non_det && (memory[offset].initialized >=0 ))
506
+ if (use_non_det &&
507
+ memory[offset].initialized !=
508
+ memory_cellt::initializedt::WRITTEN_BEFORE_READ)
507
509
return side_effect_expr_nondett (type);
508
510
mp_vectort rhs;
509
511
rhs.push_back (memory[offset].value );
@@ -681,7 +683,8 @@ void interpretert::execute_assign()
681
683
size_t size=get_size (code_assign.lhs ().type ());
682
684
for (size_t i=0 ; i<size; i++)
683
685
{
684
- memory[address+i].initialized =-1 ;
686
+ memory[address+i].initialized =
687
+ memory_cellt::initializedt::READ_BEFORE_WRITTEN;
685
688
}
686
689
}
687
690
}
@@ -706,8 +709,8 @@ void interpretert::assign(
706
709
<< " \n " << eom;
707
710
}
708
711
cell.value =rhs[i];
709
- if (cell.initialized ==0 )
710
- cell.initialized =1 ;
712
+ if (cell.initialized ==memory_cellt::initializedt::UNKNOWN )
713
+ cell.initialized =memory_cellt::initializedt::WRITTEN_BEFORE_READ ;
711
714
}
712
715
}
713
716
}
Original file line number Diff line number Diff line change @@ -161,12 +161,18 @@ class interpretert:public messaget
161
161
public:
162
162
memory_cellt () :
163
163
value (0 ),
164
- initialized (0 )
164
+ initialized (initializedt::UNKNOWN )
165
165
{}
166
166
mp_integer value;
167
167
// Initialized is annotated even during reads
168
+ enum class initializedt
169
+ {
170
+ UNKNOWN,
171
+ WRITTEN_BEFORE_READ,
172
+ READ_BEFORE_WRITTEN
173
+ };
168
174
// Set to 1 when written-before-read, -1 when read-before-written
169
- mutable char initialized;
175
+ mutable initializedt initialized;
170
176
};
171
177
172
178
typedef sparse_vectort<memory_cellt> memoryt;
Original file line number Diff line number Diff line change @@ -36,8 +36,8 @@ void interpretert::read(
36
36
{
37
37
const memory_cellt &cell=memory[integer2size_t (address+i)];
38
38
value=cell.value ;
39
- if (cell.initialized ==0 )
40
- cell.initialized =- 1 ;
39
+ if (cell.initialized ==memory_cellt::initializedt::UNKNOWN )
40
+ cell.initialized =memory_cellt::initializedt::READ_BEFORE_WRITTEN ;
41
41
}
42
42
else
43
43
value=0 ;
@@ -64,8 +64,8 @@ void interpretert::read_unbounded(
64
64
{
65
65
const memory_cellt &cell=memory[integer2size_t (address+i)];
66
66
value=cell.value ;
67
- if (cell.initialized ==0 )
68
- cell.initialized =- 1 ;
67
+ if (cell.initialized ==memory_cellt::initializedt::UNKNOWN )
68
+ cell.initialized =memory_cellt::initializedt::READ_BEFORE_WRITTEN ;
69
69
}
70
70
else
71
71
value=0 ;
@@ -86,7 +86,7 @@ void interpretert::allocate(
86
86
{
87
87
memory_cellt &cell=memory[integer2size_t (address+i)];
88
88
cell.value =0 ;
89
- cell.initialized =0 ;
89
+ cell.initialized =memory_cellt::initializedt::UNKNOWN ;
90
90
}
91
91
}
92
92
}
@@ -96,8 +96,9 @@ void interpretert::clear_input_flags()
96
96
{
97
97
for (auto &cell : memory)
98
98
{
99
- if (cell.second .initialized >0 )
100
- cell.second .initialized =0 ;
99
+ if (cell.second .initialized ==
100
+ memory_cellt::initializedt::WRITTEN_BEFORE_READ)
101
+ cell.second .initialized =memory_cellt::initializedt::UNKNOWN;
101
102
}
102
103
}
103
104
You can’t perform that action at this time.
0 commit comments