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