Skip to content

Commit 5951105

Browse files
committed
Reduce the number of symbol_exprt without a source location
Create or maintain source location information in symbol expressions.
1 parent 5f90785 commit 5951105

File tree

6 files changed

+48
-29
lines changed

6 files changed

+48
-29
lines changed

src/ansi-c/c_typecheck_gcc_polymorphic_builtins.cpp

+35-23
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,8 @@ static void instantiate_atomic_fetch_op(
673673
block.add(code_frontend_assignt{deref_ptr, std::move(op_expr)});
674674

675675
block.add(code_expressiont{side_effect_expr_function_callt{
676-
symbol_exprt::typeless("__atomic_thread_fence"),
676+
symbol_exprt::typeless("__atomic_thread_fence")
677+
.with_source_location(source_location),
677678
{parameter_exprs[2]},
678679
typet{},
679680
source_location}});
@@ -736,7 +737,8 @@ static void instantiate_atomic_op_fetch(
736737

737738
// this instruction implies an mfence, i.e., WRfence
738739
block.add(code_expressiont{side_effect_expr_function_callt{
739-
symbol_exprt::typeless("__atomic_thread_fence"),
740+
symbol_exprt::typeless("__atomic_thread_fence")
741+
.with_source_location(source_location),
740742
{parameter_exprs[2]},
741743
typet{},
742744
source_location}});
@@ -767,11 +769,11 @@ static void instantiate_sync_fetch(
767769
parameter_exprs[1],
768770
from_integer(std::memory_order_seq_cst, signed_int_type())};
769771

770-
block.add(code_returnt{
771-
side_effect_expr_function_callt{symbol_exprt::typeless(atomic_name),
772-
std::move(arguments),
773-
typet{},
774-
source_location}});
772+
block.add(code_returnt{side_effect_expr_function_callt{
773+
symbol_exprt::typeless(atomic_name).with_source_location(source_location),
774+
std::move(arguments),
775+
typet{},
776+
source_location}});
775777
}
776778

777779
static void instantiate_sync_bool_compare_and_swap(
@@ -790,7 +792,8 @@ static void instantiate_sync_bool_compare_and_swap(
790792
// _Bool __sync_bool_compare_and_swap(type *ptr, type old, type new, ...)
791793

792794
block.add(code_returnt{side_effect_expr_function_callt{
793-
symbol_exprt::typeless(ID___atomic_compare_exchange),
795+
symbol_exprt::typeless(ID___atomic_compare_exchange)
796+
.with_source_location(source_location),
794797
{parameter_exprs[0],
795798
address_of_exprt{parameter_exprs[1]},
796799
address_of_exprt{parameter_exprs[2]},
@@ -968,7 +971,8 @@ static void instantiate_atomic_load(
968971
dereference_exprt{parameter_exprs[0]}});
969972

970973
block.add(code_expressiont{side_effect_expr_function_callt{
971-
symbol_exprt::typeless("__atomic_thread_fence"),
974+
symbol_exprt::typeless("__atomic_thread_fence")
975+
.with_source_location(source_location),
972976
{parameter_exprs[2]},
973977
typet{},
974978
source_location}});
@@ -999,7 +1003,8 @@ static void instantiate_atomic_load_n(
9991003
block.add(codet{ID_decl_block, {code_frontend_declt{result}}});
10001004

10011005
block.add(code_expressiont{side_effect_expr_function_callt{
1002-
symbol_exprt::typeless(ID___atomic_load),
1006+
symbol_exprt::typeless(ID___atomic_load)
1007+
.with_source_location(source_location),
10031008
{parameter_exprs[0], address_of_exprt{result}, parameter_exprs[1]},
10041009
typet{},
10051010
source_location}});
@@ -1028,7 +1033,8 @@ static void instantiate_atomic_store(
10281033
dereference_exprt{parameter_exprs[1]}});
10291034

10301035
block.add(code_expressiont{side_effect_expr_function_callt{
1031-
symbol_exprt::typeless("__atomic_thread_fence"),
1036+
symbol_exprt::typeless("__atomic_thread_fence")
1037+
.with_source_location(source_location),
10321038
{parameter_exprs[2]},
10331039
typet{},
10341040
source_location}});
@@ -1051,13 +1057,14 @@ static void instantiate_atomic_store_n(
10511057
// This built-in function implements an atomic store operation. It writes
10521058
// val into *ptr.
10531059

1054-
block.add(code_expressiont{
1055-
side_effect_expr_function_callt{symbol_exprt::typeless(ID___atomic_store),
1056-
{parameter_exprs[0],
1057-
address_of_exprt{parameter_exprs[1]},
1058-
parameter_exprs[2]},
1059-
typet{},
1060-
source_location}});
1060+
block.add(code_expressiont{side_effect_expr_function_callt{
1061+
symbol_exprt::typeless(ID___atomic_store)
1062+
.with_source_location(source_location),
1063+
{parameter_exprs[0],
1064+
address_of_exprt{parameter_exprs[1]},
1065+
parameter_exprs[2]},
1066+
typet{},
1067+
source_location}});
10611068
}
10621069

10631070
static void instantiate_atomic_exchange(
@@ -1083,7 +1090,8 @@ static void instantiate_atomic_exchange(
10831090
dereference_exprt{parameter_exprs[1]}});
10841091

10851092
block.add(code_expressiont{side_effect_expr_function_callt{
1086-
symbol_exprt::typeless("__atomic_thread_fence"),
1093+
symbol_exprt::typeless("__atomic_thread_fence")
1094+
.with_source_location(source_location),
10871095
{parameter_exprs[3]},
10881096
typet{},
10891097
source_location}});
@@ -1114,7 +1122,8 @@ static void instantiate_atomic_exchange_n(
11141122
block.add(codet{ID_decl_block, {code_frontend_declt{result}}});
11151123

11161124
block.add(code_expressiont{side_effect_expr_function_callt{
1117-
symbol_exprt::typeless(ID___atomic_exchange),
1125+
symbol_exprt::typeless(ID___atomic_exchange)
1126+
.with_source_location(source_location),
11181127
{parameter_exprs[0],
11191128
address_of_exprt{parameter_exprs[1]},
11201129
address_of_exprt{result},
@@ -1171,7 +1180,8 @@ static void instantiate_atomic_compare_exchange(
11711180
dereference_exprt{parameter_exprs[2]}};
11721181
assign.add_source_location() = source_location;
11731182
code_expressiont success_fence{side_effect_expr_function_callt{
1174-
symbol_exprt::typeless("__atomic_thread_fence"),
1183+
symbol_exprt::typeless("__atomic_thread_fence")
1184+
.with_source_location(source_location),
11751185
{parameter_exprs[4]},
11761186
typet{},
11771187
source_location}};
@@ -1181,7 +1191,8 @@ static void instantiate_atomic_compare_exchange(
11811191
deref_ptr};
11821192
assign_not_equal.add_source_location() = source_location;
11831193
code_expressiont failure_fence{side_effect_expr_function_callt{
1184-
symbol_exprt::typeless("__atomic_thread_fence"),
1194+
symbol_exprt::typeless("__atomic_thread_fence")
1195+
.with_source_location(source_location),
11851196
{parameter_exprs[5]},
11861197
typet{},
11871198
source_location}};
@@ -1212,7 +1223,8 @@ static void instantiate_atomic_compare_exchange_n(
12121223
// desired, bool weak, int success_memorder, int failure_memorder)
12131224

12141225
block.add(code_returnt{side_effect_expr_function_callt{
1215-
symbol_exprt::typeless(ID___atomic_compare_exchange),
1226+
symbol_exprt::typeless(ID___atomic_compare_exchange)
1227+
.with_source_location(source_location),
12161228
{parameter_exprs[0],
12171229
parameter_exprs[1],
12181230
address_of_exprt{parameter_exprs[2]},

src/assembler/remove_asm.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ void remove_asmt::gcc_asm_function_call(
133133
arguments.size(), code_typet::parametert{void_pointer}},
134134
empty_typet()};
135135

136-
symbol_exprt fkt(function_identifier, fkt_type);
136+
auto fkt = symbol_exprt{function_identifier, fkt_type}.with_source_location(
137+
code.source_location());
137138

138139
code_function_callt function_call(std::move(fkt), std::move(arguments));
139140

@@ -189,8 +190,8 @@ void remove_asmt::msc_asm_function_call(
189190
arguments.size(), code_typet::parametert{void_pointer}},
190191
empty_typet()};
191192

192-
symbol_exprt fkt(function_identifier, fkt_type);
193-
193+
auto fkt = symbol_exprt{function_identifier, fkt_type}.with_source_location(
194+
code.source_location());
194195
code_function_callt function_call(std::move(fkt), std::move(arguments));
195196

196197
dest.add(

src/pointer-analysis/value_set_dereference.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ exprt value_set_dereferencet::handle_dereference_base_case(
236236
pointer.type(),
237237
"derefd_pointer",
238238
"derefd_pointer",
239-
source_locationt(),
239+
pointer.find_source_location(),
240240
language_mode,
241241
new_symbol_table);
242242

src/util/ssa_expr.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ ssa_exprt::ssa_exprt(const exprt &expr) : symbol_exprt(expr.type())
4141
{
4242
set(ID_C_SSA_symbol, true);
4343
add(ID_expression, expr);
44+
with_source_location(expr.source_location());
4445
std::ostringstream os;
4546
initialize_ssa_identifier(os, expr);
4647
const std::string id = os.str();

src/util/symbol.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ void symbolt::swap(symbolt &b)
120120
/// type of the symbol object.
121121
symbol_exprt symbolt::symbol_expr() const
122122
{
123-
return symbol_exprt(name, type);
123+
return symbol_exprt(name, type).with_source_location(location);
124124
}
125125

126126
/// Check that the instance object is well formed.

unit/path_strategies.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,13 @@ void symex_eventt::validate_resume(
337337
REQUIRE(!events.empty());
338338

339339
int dst = 0;
340-
if(!state.saved_target->source_location().get_line().empty())
340+
if(
341+
state.saved_target->source_location().get_file() !=
342+
"<built-in-additions>" &&
343+
!state.saved_target->source_location().get_line().empty())
344+
{
341345
dst = std::stoi(state.saved_target->source_location().get_line().c_str());
346+
}
342347

343348
if(state.has_saved_next_instruction)
344349
{

0 commit comments

Comments
 (0)