Skip to content

Commit 7610b3f

Browse files
author
owen-jones-diffblue
authored
Merge pull request diffblue#329 from diffblue/owen-jones-diffblue/precise-evs-weak-writes-in-function-summary
Turn off strong writes for precise EVSs
2 parents 084e136 + a032e21 commit 7610b3f

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

regression/LVSA/TestEVS/test_evs.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ def test_read_from_field_from_supertype(tmpdir):
7070

7171
value_set_expectation.check_number_of_values(2)
7272
value_set_expectation.check_contains_per_field_evs(access_path=['.left'])
73-
value_set_expectation.check_contains_precise_evs(access_path=['[email protected]$A.node', '.left'])
73+
value_set_expectation.check_contains_precise_evs(label_suffix='b', access_path=['[email protected]$A.node',
74+
'.left'])
7475

7576

7677
def test_write_to_field_from_supertype(tmpdir):
@@ -91,9 +92,10 @@ def test_write_to_field_of_B_through_A(tmpdir):
9192

9293
value_set_expectation = lvsa_expectation.get_value_set_for_public_static('static_node')
9394

94-
value_set_expectation.check_number_of_values(2)
95+
value_set_expectation.check_number_of_values(3)
9596
value_set_expectation.check_contains_root_object_evs(label_suffix='node_parameter')
9697
value_set_expectation.check_contains_per_field_evs(access_path=['.node'])
98+
value_set_expectation.check_contains_precise_evs(label_suffix='b', access_path=['[email protected]$A.node'])
9799

98100

99101
def test_read_from_array(tmpdir):

regression/LVSA/TestPreciseAccessPaths/test_precise_access_paths.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ def test_apply_set_field_of_external_object(tmpdir):
6666
value_set_expectation = lvsa_expectation.get_value_set_for_precise_evs(
6767
parameter_name='parameter_a', suffix='.object')
6868

69-
value_set_expectation.check_number_of_values(1)
69+
value_set_expectation.check_number_of_values(2)
7070
value_set_expectation.check_contains_root_object_evs(label_suffix='parameter_object')
71+
value_set_expectation.check_contains_precise_evs(label_suffix='parameter_a', access_path=['.object'],
72+
is_initializer=True)
7173

7274

7375
def test_conditionally_set_field_of_external_object(tmpdir):
@@ -88,8 +90,10 @@ def test_apply_conditionally_set_field_of_external_object(tmpdir):
8890
value_set_expectation = lvsa_expectation.get_value_set_for_precise_evs(
8991
parameter_name='parameter_a', suffix='.object')
9092

91-
value_set_expectation.check_number_of_values(1)
93+
value_set_expectation.check_number_of_values(2)
9294
value_set_expectation.check_contains_root_object_evs(label_suffix='parameter_object')
95+
value_set_expectation.check_contains_precise_evs(label_suffix='parameter_a', access_path=['.object'],
96+
is_initializer=True)
9397

9498

9599
def test_read_field_before_writing_to_aliasable_field(tmpdir):
@@ -168,8 +172,9 @@ def test_call_function_to_allocate_new_object(tmpdir):
168172

169173
value_set_expectation = lvsa_expectation.get_value_set_for_output()
170174

171-
value_set_expectation.check_number_of_values(2)
175+
value_set_expectation.check_number_of_values(3)
172176
value_set_expectation.check_contains_per_field_evs(access_path=['.object'])
177+
value_set_expectation.check_contains_precise_evs(label_suffix='param_A', access_path=['.object'])
173178
value_set_expectation.check_contains_dynamic_object()
174179

175180

src/pointer-analysis/local_value_set_analysis.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -462,15 +462,9 @@ void local_value_set_analysist::transform_function_stub(
462462
ns,
463463
*this);
464464

465-
std::string objkey = lhs_fieldname.base_name + lhs_fieldname.field_name;
466-
auto it = valuesets.values.find(objkey);
467-
const bool singular = it == valuesets.values.end() ||
468-
it->second.object_map.read().size() == 1;
469-
bool add_to_sets =
470-
!singular ||
471-
!precise_evs.can_make_strong_write_to_precise_external_value_set();
472-
473-
auto demoted_rhs_values = pre_call_rhs_value_sets.at(assignment.second);
465+
/// Weak write - can we do strong writes?
466+
bool add_to_sets = true;
467+
auto demoted_rhs_values=pre_call_rhs_value_sets.at(assignment.second);
474468
valuesets.demote_initializers(demoted_rhs_values);
475469
valuesets.assign_valueset(
476470
precise_access_path_expr, demoted_rhs_values, ns, add_to_sets);

0 commit comments

Comments
 (0)