Skip to content

Commit 50660db

Browse files
Specify source location for nondet expressions
1 parent fd4f563 commit 50660db

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+169
-158
lines changed

jbmc/src/java_bytecode/java_bytecode_concurrency_instrumentation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ static void instrument_synchronized_code(
253253
catch_block.add(monitorexit);
254254

255255
// Re-throw exception
256-
side_effect_expr_throwt throw_expr;
256+
side_effect_expr_throwt throw_expr(irept(), typet(), code.source_location());
257257
throw_expr.copy_to_operands(catch_var);
258258
catch_block.add(code_expressiont(throw_expr));
259259

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -813,8 +813,7 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
813813
clone_body.move_to_operands(declare_cloned);
814814

815815
side_effect_exprt java_new_array(
816-
ID_java_new_array,
817-
java_reference_type(symbol_type));
816+
ID_java_new_array, java_reference_type(symbol_type), source_locationt());
818817
dereference_exprt old_array(this_symbol.symbol_expr(), symbol_type);
819818
dereference_exprt new_array(local_symexpr, symbol_type);
820819
member_exprt old_length(
@@ -860,7 +859,7 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
860859
copy_loop.cond()=
861860
binary_relation_exprt(index_symexpr, ID_lt, old_length);
862861

863-
side_effect_exprt inc(ID_assign);
862+
side_effect_exprt inc(ID_assign, typet(), source_locationt());
864863
inc.operands().resize(2);
865864
inc.op0()=index_symexpr;
866865
inc.op1()=plus_exprt(index_symexpr, from_integer(1, index_symexpr.type()));

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,8 +2328,7 @@ void java_bytecode_convert_methodt::convert_athrow(
23282328
}
23292329
else
23302330
{
2331-
side_effect_expr_throwt throw_expr;
2332-
throw_expr.add_source_location() = location;
2331+
side_effect_expr_throwt throw_expr(irept(), typet(), location);
23332332
throw_expr.copy_to_operands(op[0]);
23342333
c = code_expressiont(throw_expr);
23352334
}
@@ -2454,14 +2453,11 @@ void java_bytecode_convert_methodt::convert_multianewarray(
24542453
codet &c,
24552454
exprt::operandst &results)
24562455
{
2456+
PRECONDITION(!location.get_line().empty());
24572457
const reference_typet ref_type = java_reference_type(arg0.type());
2458-
2459-
side_effect_exprt java_new_array(ID_java_new_array, ref_type);
2458+
side_effect_exprt java_new_array(ID_java_new_array, ref_type, location);
24602459
java_new_array.operands() = op;
24612460

2462-
if(!location.get_line().empty())
2463-
java_new_array.add_source_location() = location;
2464-
24652461
code_blockt create;
24662462

24672463
if(max_array_length != 0)
@@ -2516,12 +2512,9 @@ void java_bytecode_convert_methodt::convert_newarray(
25162512

25172513
const reference_typet ref_type = java_array_type(element_type);
25182514

2519-
side_effect_exprt java_new_array(ID_java_new_array, ref_type);
2515+
side_effect_exprt java_new_array(ID_java_new_array, ref_type, location);
25202516
java_new_array.copy_to_operands(op[0]);
25212517

2522-
if(!location.get_line().empty())
2523-
java_new_array.add_source_location() = location;
2524-
25252518
c = code_blockt();
25262519

25272520
if(max_array_length != 0)
@@ -2543,7 +2536,7 @@ void java_bytecode_convert_methodt::convert_new(
25432536
exprt::operandst &results)
25442537
{
25452538
const reference_typet ref_type = java_reference_type(arg0.type());
2546-
side_effect_exprt java_new_expr(ID_java_new, ref_type);
2539+
side_effect_exprt java_new_expr(ID_java_new, ref_type, location);
25472540

25482541
if(!location.get_line().empty())
25492542
java_new_expr.add_source_location() = location;

jbmc/src/java_bytecode/java_bytecode_instrument.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ codet java_bytecode_instrumentt::throw_exception(
122122
ID_java,
123123
symbol_table);
124124

125-
side_effect_exprt new_instance(ID_java_new, exc_ptr_type);
125+
side_effect_exprt new_instance(ID_java_new, exc_ptr_type, original_loc);
126126
code_assignt assign_new(new_symbol.symbol_expr(), new_instance);
127127

128-
side_effect_expr_throwt throw_expr;
128+
side_effect_expr_throwt throw_expr(irept(), typet(), original_loc);
129129
throw_expr.copy_to_operands(new_symbol.symbol_expr());
130130

131131
code_blockt throw_code;

jbmc/src/java_bytecode/java_bytecode_typecheck_expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,6 @@ void java_bytecode_typecheckt::typecheck_expr_member(member_exprt &expr)
160160
<< component_name << "` in class hierarchy" << eom;
161161

162162
// We replace by a non-det of same type
163-
side_effect_expr_nondett nondet(expr.type());
163+
side_effect_expr_nondett nondet(expr.type(), expr.source_location());
164164
expr.swap(nondet);
165165
}

jbmc/src/java_bytecode/java_entry_point.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ static void java_static_lifetime_init(
162162
// Call the literal initializer method instead of a nondet initializer:
163163

164164
// For arguments we can't parse yet:
165-
side_effect_expr_nondett nondet_bool(java_boolean_type());
165+
side_effect_expr_nondett nondet_bool(java_boolean_type(), sym.location);
166166

167167
// Argument order is: name, isAnnotation, isArray, isInterface,
168168
// isSynthetic, isLocalClass, isMemberClass, isEnum

jbmc/src/java_bytecode/java_object_factory.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ exprt allocate_dynamic_object(
173173
{
174174
INVARIANT(!object_size.is_nil(), "Size of Java objects should be known");
175175
// malloc expression
176-
side_effect_exprt malloc_expr(ID_allocate, pointer_type(allocate_type));
176+
side_effect_exprt malloc_expr(
177+
ID_allocate, pointer_type(allocate_type), loc);
177178
malloc_expr.copy_to_operands(object_size);
178179
malloc_expr.copy_to_operands(false_exprt());
179180
// create a symbol for the malloc expression so we can initialize
@@ -503,7 +504,7 @@ static mp_integer max_value(const typet &type)
503504
/// \return code allocation object and assigning `lhs`
504505
static codet make_allocate_code(const symbol_exprt &lhs, const exprt &size)
505506
{
506-
side_effect_exprt alloc(ID_allocate, lhs.type());
507+
side_effect_exprt alloc(ID_allocate, lhs.type(), lhs.source_location());
507508
alloc.copy_to_operands(size);
508509
alloc.copy_to_operands(false_exprt());
509510
return code_assignt(lhs, alloc);
@@ -599,7 +600,7 @@ bool initialize_nondet_string_fields(
599600
ID_java,
600601
symbol_table);
601602
const symbol_exprt length_expr = length_sym.symbol_expr();
602-
const side_effect_expr_nondett nondet_length(length_expr.type());
603+
const side_effect_expr_nondett nondet_length(length_expr.type(), loc);
603604
code.add(code_declt(length_expr));
604605
code.add(code_assignt(length_expr, nondet_length));
605606

@@ -828,7 +829,8 @@ void java_object_factoryt::gen_nondet_pointer_init(
828829
// tmp$<temporary_counter>>
829830
// }
830831
code_ifthenelset null_check;
831-
null_check.cond()=side_effect_expr_nondett(bool_typet());
832+
null_check.cond() =
833+
side_effect_expr_nondett(bool_typet(), expr.source_location());
832834
null_check.then_case()=set_null_inst;
833835
null_check.else_case()=non_null_inst;
834836

@@ -847,7 +849,8 @@ void java_object_factoryt::gen_nondet_pointer_init(
847849
"No-update and must-update should have already been resolved");
848850

849851
code_ifthenelset update_check;
850-
update_check.cond()=side_effect_expr_nondett(bool_typet());
852+
update_check.cond() =
853+
side_effect_expr_nondett(bool_typet(), expr.source_location());
851854
update_check.then_case()=update_in_place_assignments;
852855
update_check.else_case()=new_object_assignments;
853856

@@ -1182,9 +1185,8 @@ void java_object_factoryt::gen_nondet_init(
11821185
{
11831186
// types different from pointer or structure:
11841187
// bool, int, float, byte, char, ...
1185-
exprt rhs=type.id()==ID_c_bool?
1186-
get_nondet_bool(type):
1187-
side_effect_expr_nondett(type);
1188+
exprt rhs = type.id() == ID_c_bool ? get_nondet_bool(type)
1189+
: side_effect_expr_nondett(type, loc);
11881190
code_assignt assign(expr, rhs);
11891191
assign.add_source_location()=loc;
11901192

@@ -1244,7 +1246,7 @@ void java_object_factoryt::allocate_nondet_length_array(
12441246
assignments.move_to_operands(assume_inst1);
12451247
assignments.move_to_operands(assume_inst2);
12461248

1247-
side_effect_exprt java_new_array(ID_java_new_array, lhs.type());
1249+
side_effect_exprt java_new_array(ID_java_new_array, lhs.type(), loc);
12481250
java_new_array.copy_to_operands(length_sym_expr);
12491251
java_new_array.set(ID_length_upper_bound, max_length_expr);
12501252
java_new_array.type().subtype().set(ID_element_type, element_type);

jbmc/src/java_bytecode/java_static_initializers.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,11 +788,13 @@ codet stub_global_initializer_factoryt::get_stub_initializer_body(
788788
? object_factory_parameters.max_nonnull_tree_depth + 1
789789
: object_factory_parameters.max_nonnull_tree_depth;
790790

791+
source_locationt location;
792+
location.set_function(function_id);
791793
gen_nondet_init(
792794
new_global_symbol,
793795
static_init_body,
794796
symbol_table,
795-
source_locationt(),
797+
location,
796798
false,
797799
allocation_typet::DYNAMIC,
798800
parameters,

jbmc/src/java_bytecode/java_string_library_preprocess.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ refined_string_exprt java_string_library_preprocesst::make_nondet_string_expr(
547547
/// \todo refactor with initialize_nonddet_string_struct
548548
const refined_string_exprt str = decl_string_expr(loc, symbol_table, code);
549549

550-
side_effect_expr_nondett nondet_length(str.length().type());
550+
const side_effect_expr_nondett nondet_length(str.length().type(), loc);
551551
code.add(code_assignt(str.length(), nondet_length), loc);
552552

553553
exprt nondet_array_expr =
@@ -667,7 +667,7 @@ exprt make_nondet_infinite_char_array(
667667
symbol_table);
668668
const symbol_exprt data_expr = data_sym.symbol_expr();
669669
code.add(code_declt(data_expr), loc);
670-
side_effect_expr_nondett nondet_data(data_expr.type());
670+
const side_effect_expr_nondett nondet_data(data_expr.type(), loc);
671671
code.add(code_assignt(data_expr, nondet_data), loc);
672672
return data_expr;
673673
}

jbmc/src/java_bytecode/remove_java_new.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ goto_programt::targett remove_java_newt::lower_java_new(
8484
CHECK_RETURN(object_size.is_not_nil());
8585

8686
// we produce a malloc side-effect, which stays
87-
side_effect_exprt malloc_expr(ID_allocate, rhs.type());
87+
side_effect_exprt malloc_expr(ID_allocate, rhs.type(), location);
8888
malloc_expr.copy_to_operands(object_size);
8989
// could use true and get rid of the code below
9090
malloc_expr.copy_to_operands(false_exprt());
@@ -135,7 +135,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
135135
CHECK_RETURN(!object_size.is_nil());
136136

137137
// we produce a malloc side-effect, which stays
138-
side_effect_exprt malloc_expr(ID_allocate, rhs.type());
138+
side_effect_exprt malloc_expr(ID_allocate, rhs.type(), location);
139139
malloc_expr.copy_to_operands(object_size);
140140
// code use true and get rid of the code below
141141
malloc_expr.copy_to_operands(false_exprt());
@@ -188,7 +188,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
188188
allocate_data_type = data.type();
189189

190190
side_effect_exprt data_java_new_expr(
191-
ID_java_new_array_data, allocate_data_type);
191+
ID_java_new_array_data, allocate_data_type, location);
192192

193193
// The instruction may specify a (hopefully small) upper bound on the
194194
// array size, in which case we allocate a fixed-length array that may
@@ -276,7 +276,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
276276
CHECK_RETURN(sub_type.id() == ID_pointer);
277277
sub_java_new.type() = sub_type;
278278

279-
side_effect_exprt inc(ID_assign);
279+
side_effect_exprt inc(ID_assign, typet(), location);
280280
inc.operands().resize(2);
281281
inc.op0() = tmp_i;
282282
inc.op1() = plus_exprt(tmp_i, from_integer(1, tmp_i.type()));

0 commit comments

Comments
 (0)