@@ -157,6 +157,58 @@ SCENARIO(
157
157
}
158
158
}
159
159
160
+ GIVEN (
161
+ " A value set in which pointer symbol `ptr1` can point to `&value1` or "
162
+ " `unknown`" )
163
+ {
164
+ symex_value_sett value_set;
165
+ const exprt unknown_expr{ID_unknown, ptr_type};
166
+ const if_exprt if_expr{b, address1, unknown_expr};
167
+ const renamedt<ssa_exprt, L1> ptr1_l1 = state.rename_ssa <L1>(ssa_ptr1, ns);
168
+ const renamedt<exprt, L1> if_expr_l1 = state.rename <L1>(if_expr, ns);
169
+ // ptr1 <- b ? &value1 : unknown
170
+ value_set.assign (ptr1_l1, if_expr_l1, ns, false , false );
171
+
172
+ WHEN (" Evaluating ptr1 == &value1" )
173
+ {
174
+ const equal_exprt comparison{ptr1, address1};
175
+ const renamedt<exprt, L2> renamed_comparison =
176
+ state.rename (comparison, ns);
177
+ auto result = try_evaluate_pointer_comparisons (
178
+ renamed_comparison, value_set, ID_java, ns);
179
+ THEN (" Evaluation leaves the expression unchanged" )
180
+ {
181
+ REQUIRE (result.get () == renamed_comparison.get ());
182
+ }
183
+ }
184
+
185
+ WHEN (" Evaluating ptr1 != &value1" )
186
+ {
187
+ const notequal_exprt comparison{ptr1, address1};
188
+ const renamedt<exprt, L2> renamed_comparison =
189
+ state.rename (comparison, ns);
190
+ auto result = try_evaluate_pointer_comparisons (
191
+ renamed_comparison, value_set, ID_java, ns);
192
+ THEN (" Evaluation leaves the expression unchanged" )
193
+ {
194
+ REQUIRE (result.get () == renamed_comparison.get ());
195
+ }
196
+ }
197
+
198
+ WHEN (" Evaluating ptr1 != nullptr" )
199
+ {
200
+ const notequal_exprt comparison{ptr1, null_ptr};
201
+ const renamedt<exprt, L2> renamed_comparison =
202
+ state.rename (comparison, ns);
203
+ auto result = try_evaluate_pointer_comparisons (
204
+ renamed_comparison, value_set, ID_java, ns);
205
+ THEN (" Evaluation leaves the expression unchanged" )
206
+ {
207
+ REQUIRE (result.get () == renamed_comparison.get ());
208
+ }
209
+ }
210
+ }
211
+
160
212
GIVEN (" A struct whose first element can only point to `&value1`" )
161
213
{
162
214
// member is `struct_symbol.pointer_field`
0 commit comments