Skip to content

Commit 1a9ec4e

Browse files
committed
Use symbol_table_baset instead of symbol_tablet where possible
We almost never create a fresh symbol table, and any time we do so we should really make sure this is the intended behaviour.
1 parent 72044eb commit 1a9ec4e

File tree

150 files changed

+593
-573
lines changed

Some content is hidden

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

150 files changed

+593
-573
lines changed

jbmc/src/java_bytecode/ci_lazy_methods.cpp

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Author: Diffblue Ltd.
3434
/// these method bodies are produced internally, rather than generated from
3535
/// Java bytecode.
3636
ci_lazy_methodst::ci_lazy_methodst(
37-
const symbol_tablet &symbol_table,
37+
const symbol_table_baset &symbol_table,
3838
const irep_idt &main_class,
3939
const std::vector<irep_idt> &main_jar_classes,
4040
const std::vector<load_extra_methodst> &lazy_methods_extra_entry_points,
@@ -96,7 +96,7 @@ static bool references_class_model(const exprt &expr)
9696
/// \param message_handler: the message handler to use for output
9797
/// \return Returns false on success
9898
bool ci_lazy_methodst::operator()(
99-
symbol_tablet &symbol_table,
99+
symbol_table_baset &symbol_table,
100100
method_bytecodet &method_bytecode,
101101
const method_convertert &method_converter,
102102
message_handlert &message_handler)
@@ -221,7 +221,16 @@ bool ci_lazy_methodst::operator()(
221221
<< symbol_table.symbols.size() - keep_symbols.symbols.size()
222222
<< " unreachable methods and globals" << messaget::eom;
223223

224-
symbol_table.swap(keep_symbols);
224+
auto sorted_to_keep = keep_symbols.sorted_symbol_names();
225+
auto all_sorted = symbol_table.sorted_symbol_names();
226+
auto it = sorted_to_keep.cbegin();
227+
for(const auto &id : all_sorted)
228+
{
229+
if(it == sorted_to_keep.cend() || id != *it)
230+
symbol_table.remove(id);
231+
else
232+
++it;
233+
}
225234

226235
return false;
227236
}
@@ -238,7 +247,7 @@ bool ci_lazy_methodst::handle_virtual_methods_with_no_callees(
238247
std::unordered_set<irep_idt> &instantiated_classes,
239248
const std::unordered_set<class_method_descriptor_exprt, irep_hash>
240249
&virtual_functions,
241-
symbol_tablet &symbol_table)
250+
symbol_table_baset &symbol_table)
242251
{
243252
ci_lazy_methods_neededt lazy_methods_loader(
244253
methods_to_convert_later,
@@ -321,7 +330,7 @@ ci_lazy_methodst::convert_and_analyze_method(
321330
std::unordered_set<irep_idt> &methods_already_populated,
322331
const bool class_initializer_already_seen,
323332
const irep_idt &method_name,
324-
symbol_tablet &symbol_table,
333+
symbol_table_baset &symbol_table,
325334
std::unordered_set<irep_idt> &methods_to_convert_later,
326335
std::unordered_set<irep_idt> &instantiated_classes,
327336
std::unordered_set<class_method_descriptor_exprt, irep_hash>
@@ -367,7 +376,7 @@ ci_lazy_methodst::convert_and_analyze_method(
367376
/// * all the methods of the main jar file
368377
/// \return set of identifiers of entry point methods
369378
std::unordered_set<irep_idt> ci_lazy_methodst::entry_point_methods(
370-
const symbol_tablet &symbol_table,
379+
const symbol_table_baset &symbol_table,
371380
message_handlert &message_handler)
372381
{
373382
std::unordered_set<irep_idt> methods_to_convert_later;
@@ -481,7 +490,7 @@ void ci_lazy_methodst::get_virtual_method_targets(
481490
const class_method_descriptor_exprt &called_function,
482491
const std::unordered_set<irep_idt> &instantiated_classes,
483492
std::unordered_set<irep_idt> &callable_methods,
484-
symbol_tablet &symbol_table)
493+
symbol_table_baset &symbol_table)
485494
{
486495
const auto &call_class = called_function.class_id();
487496
const auto &method_name = called_function.mangled_method_name();
@@ -506,8 +515,8 @@ void ci_lazy_methodst::get_virtual_method_targets(
506515
/// `e` or its children.
507516
void ci_lazy_methodst::gather_needed_globals(
508517
const exprt &e,
509-
const symbol_tablet &symbol_table,
510-
symbol_tablet &needed)
518+
const symbol_table_baset &symbol_table,
519+
symbol_table_baset &needed)
511520
{
512521
if(e.id()==ID_symbol)
513522
{
@@ -546,7 +555,7 @@ irep_idt ci_lazy_methodst::get_virtual_method_target(
546555
const std::unordered_set<irep_idt> &instantiated_classes,
547556
const irep_idt &call_basename,
548557
const irep_idt &classname,
549-
const symbol_tablet &symbol_table)
558+
const symbol_table_baset &symbol_table)
550559
{
551560
// Program-wide, is this class ever instantiated?
552561
if(!instantiated_classes.count(classname))

jbmc/src/java_bytecode/ci_lazy_methods.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class ci_lazy_methods_neededt;
2727
class java_class_loadert;
2828
class message_handlert;
2929
class select_pointer_typet;
30+
class symbol_table_baset;
3031

3132
// Map from method id to class_method_and_bytecodet
3233
class method_bytecodet
@@ -90,14 +91,14 @@ typedef std::function<
9091
bool(const irep_idt &function_id, ci_lazy_methods_neededt)>
9192
method_convertert;
9293

93-
typedef std::function<std::vector<irep_idt>(const symbol_tablet &)>
94+
typedef std::function<std::vector<irep_idt>(const symbol_table_baset &)>
9495
load_extra_methodst;
9596

9697
class ci_lazy_methodst
9798
{
9899
public:
99100
ci_lazy_methodst(
100-
const symbol_tablet &symbol_table,
101+
const symbol_table_baset &symbol_table,
101102
const irep_idt &main_class,
102103
const std::vector<irep_idt> &main_jar_classes,
103104
const std::vector<load_extra_methodst> &lazy_methods_extra_entry_points,
@@ -108,7 +109,7 @@ class ci_lazy_methodst
108109

109110
// not const since messaget
110111
bool operator()(
111-
symbol_tablet &symbol_table,
112+
symbol_table_baset &symbol_table,
112113
method_bytecodet &method_bytecode,
113114
const method_convertert &method_converter,
114115
message_handlert &message_handler);
@@ -127,18 +128,18 @@ class ci_lazy_methodst
127128
const class_method_descriptor_exprt &called_function,
128129
const std::unordered_set<irep_idt> &instantiated_classes,
129130
std::unordered_set<irep_idt> &callable_methods,
130-
symbol_tablet &symbol_table);
131+
symbol_table_baset &symbol_table);
131132

132133
void gather_needed_globals(
133134
const exprt &e,
134-
const symbol_tablet &symbol_table,
135-
symbol_tablet &needed);
135+
const symbol_table_baset &symbol_table,
136+
symbol_table_baset &needed);
136137

137138
irep_idt get_virtual_method_target(
138139
const std::unordered_set<irep_idt> &instantiated_classes,
139140
const irep_idt &call_basename,
140141
const irep_idt &classname,
141-
const symbol_tablet &symbol_table);
142+
const symbol_table_baset &symbol_table);
142143

143144
static irep_idt build_virtual_method_name(
144145
const irep_idt &class_name,
@@ -154,7 +155,7 @@ class ci_lazy_methodst
154155
const synthetic_methods_mapt &synthetic_methods;
155156

156157
std::unordered_set<irep_idt> entry_point_methods(
157-
const symbol_tablet &symbol_table,
158+
const symbol_table_baset &symbol_table,
158159
message_handlert &message_handler);
159160

160161
struct convert_method_resultt
@@ -168,7 +169,7 @@ class ci_lazy_methodst
168169
std::unordered_set<irep_idt> &methods_already_populated,
169170
const bool class_initializer_already_seen,
170171
const irep_idt &method_name,
171-
symbol_tablet &symbol_table,
172+
symbol_table_baset &symbol_table,
172173
std::unordered_set<irep_idt> &methods_to_convert_later,
173174
std::unordered_set<irep_idt> &instantiated_classes,
174175
std::unordered_set<class_method_descriptor_exprt, irep_hash>
@@ -180,7 +181,7 @@ class ci_lazy_methodst
180181
std::unordered_set<irep_idt> &instantiated_classes,
181182
const std::unordered_set<class_method_descriptor_exprt, irep_hash>
182183
&virtual_functions,
183-
symbol_tablet &symbol_table);
184+
symbol_table_baset &symbol_table);
184185
};
185186

186187
#endif // CPROVER_JAVA_BYTECODE_GATHER_METHODS_LAZILY_H

jbmc/src/java_bytecode/ci_lazy_methods_needed.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Author: Chris Smowton, [email protected]
1919
class namespacet;
2020
class pointer_typet;
2121
class select_pointer_typet;
22-
class symbol_tablet;
22+
class symbol_table_baset;
2323
class typet;
2424

2525
class ci_lazy_methods_neededt
@@ -28,7 +28,7 @@ class ci_lazy_methods_neededt
2828
ci_lazy_methods_neededt(
2929
std::unordered_set<irep_idt> &_callable_methods,
3030
std::unordered_set<irep_idt> &_instantiated_classes,
31-
const symbol_tablet &_symbol_table,
31+
const symbol_table_baset &_symbol_table,
3232
const select_pointer_typet &pointer_type_selector)
3333
: callable_methods(_callable_methods),
3434
instantiated_classes(_instantiated_classes),
@@ -53,7 +53,7 @@ class ci_lazy_methods_neededt
5353
// found so far, so we can use a membership test to avoid
5454
// repeatedly exploring a class hierarchy.
5555
std::unordered_set<irep_idt> &instantiated_classes;
56-
const symbol_tablet &symbol_table;
56+
const symbol_table_baset &symbol_table;
5757

5858
const select_pointer_typet &pointer_type_selector;
5959

jbmc/src/java_bytecode/java_bytecode_concurrency_instrumentation.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ Author: Kurt Degiogrio, [email protected]
77
\*******************************************************************/
88

99
#include "java_bytecode_concurrency_instrumentation.h"
10-
#include "expr2java.h"
11-
#include "java_types.h"
12-
#include "java_utils.h"
1310

1411
#include <util/arith_tools.h>
1512
#include <util/cprover_prefix.h>
1613
#include <util/expr_iterator.h>
1714
#include <util/message.h>
1815
#include <util/namespace.h>
1916
#include <util/std_types.h>
20-
#include <util/symbol_table.h>
17+
#include <util/symbol_table_base.h>
18+
19+
#include "expr2java.h"
20+
#include "java_types.h"
21+
#include "java_utils.h"
2122

2223
// Disable linter to allow an std::string constant.
2324
const std::string next_thread_id = CPROVER_PREFIX "_next_thread_id";// NOLINT(*)
@@ -33,7 +34,7 @@ const std::string thread_id = CPROVER_PREFIX "_thread_id";// NOLINT(*)
3334
/// /param is_static_lifetime: if true this symbol will be set as static
3435
/// /return returns new or existing symbol.
3536
static symbolt add_or_get_symbol(
36-
symbol_tablet &symbol_table,
37+
symbol_table_baset &symbol_table,
3738
const irep_idt &name,
3839
const irep_idt &base_name,
3940
const typet &type,
@@ -101,7 +102,7 @@ static const std::string get_thread_block_identifier(
101102
/// \param object: expression representing a 'java.Lang.Object'. This object is
102103
/// used to achieve object-level locking by calling monitoroenter/monitorexit.
103104
static codet get_monitor_call(
104-
const symbol_tablet &symbol_table,
105+
const symbol_table_baset &symbol_table,
105106
bool is_enter,
106107
const exprt &object)
107108
{
@@ -206,7 +207,7 @@ static void monitor_exits(codet &code, const codet &monitorexit)
206207
/// \param symbol: writeable symbol hosting code to synchronize
207208
/// \param sync_object: object to use as a lock
208209
static void instrument_synchronized_code(
209-
symbol_tablet &symbol_table,
210+
symbol_table_baset &symbol_table,
210211
symbolt &symbol,
211212
const exprt &sync_object)
212213
{
@@ -271,7 +272,7 @@ static void instrument_synchronized_code(
271272
static void instrument_start_thread(
272273
const code_function_callt &f_code,
273274
codet &code,
274-
symbol_tablet &symbol_table)
275+
symbol_table_baset &symbol_table)
275276
{
276277
PRECONDITION(f_code.arguments().size() == 1);
277278

@@ -341,7 +342,7 @@ static void instrument_start_thread(
341342
static void instrument_end_thread(
342343
const code_function_callt &f_code,
343344
codet &code,
344-
const symbol_tablet &symbol_table)
345+
const symbol_table_baset &symbol_table)
345346
{
346347
PRECONDITION(f_code.arguments().size() == 1);
347348
(void)symbol_table; // unused parameter
@@ -375,7 +376,7 @@ static void instrument_end_thread(
375376
static void instrument_get_current_thread_id(
376377
const code_function_callt &f_code,
377378
codet &code,
378-
symbol_tablet &symbol_table)
379+
symbol_table_baset &symbol_table)
379380
{
380381
PRECONDITION(f_code.arguments().size() == 0);
381382

@@ -406,7 +407,7 @@ static void instrument_get_current_thread_id(
406407
static void instrument_get_monitor_count(
407408
const code_function_callt &f_code,
408409
codet &code,
409-
symbol_tablet &symbol_table)
410+
symbol_table_baset &symbol_table)
410411
{
411412
PRECONDITION(f_code.arguments().size() == 1);
412413

@@ -484,10 +485,10 @@ static void instrument_get_monitor_count(
484485
/// symex. See https://github.com/diffblue/cbmc/issues/1630/for more details.
485486
///
486487
/// \param symbol_table: a symbol table
487-
void convert_threadblock(symbol_tablet &symbol_table)
488+
void convert_threadblock(symbol_table_baset &symbol_table)
488489
{
489-
using instrument_callbackt =
490-
std::function<void(const code_function_callt&, codet&, symbol_tablet&)>;
490+
using instrument_callbackt = std::function<void(
491+
const code_function_callt &, codet &, symbol_table_baset &)>;
491492
using expr_replacement_mapt =
492493
std::unordered_map<const exprt, instrument_callbackt, irep_hash>;
493494

@@ -603,7 +604,7 @@ void convert_threadblock(symbol_tablet &symbol_table)
603604
/// \param symbol_table: a symbol table
604605
/// \param message_handler: status output
605606
void convert_synchronized_methods(
606-
symbol_tablet &symbol_table,
607+
symbol_table_baset &symbol_table,
607608
message_handlert &message_handler)
608609
{
609610
namespacet ns(symbol_table);

jbmc/src/java_bytecode/java_bytecode_concurrency_instrumentation.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ Author: Kurt Degiogrio, [email protected]
99
#define CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_CONCURRENCY_INSTRUMENTATION_H
1010

1111
class message_handlert;
12-
class symbol_tablet;
12+
class symbol_table_baset;
1313

14-
void convert_threadblock(symbol_tablet &symbol_table);
14+
void convert_threadblock(symbol_table_baset &symbol_table);
1515
void convert_synchronized_methods(
16-
symbol_tablet &symbol_table,
16+
symbol_table_baset &symbol_table,
1717
message_handlert &message_handler);
1818

1919
#endif

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class java_bytecode_convert_classt
3131
{
3232
public:
3333
java_bytecode_convert_classt(
34-
symbol_tablet &_symbol_table,
34+
symbol_table_baset &_symbol_table,
3535
message_handlert &_message_handler,
3636
size_t _max_array_length,
3737
method_bytecodet &method_bytecode,
@@ -105,7 +105,7 @@ class java_bytecode_convert_classt
105105

106106
private:
107107
messaget log;
108-
symbol_tablet &symbol_table;
108+
symbol_table_baset &symbol_table;
109109
const size_t max_array_length;
110110
method_bytecodet &method_bytecode;
111111
java_string_library_preprocesst &string_preprocess;
@@ -790,7 +790,7 @@ void java_bytecode_convert_classt::convert(
790790
}
791791
}
792792

793-
void add_java_array_types(symbol_tablet &symbol_table)
793+
void add_java_array_types(symbol_table_baset &symbol_table)
794794
{
795795
const std::string letters="ijsbcfdza";
796796

@@ -1003,7 +1003,7 @@ void add_java_array_types(symbol_tablet &symbol_table)
10031003

10041004
bool java_bytecode_convert_class(
10051005
const java_class_loadert::parse_tree_with_overlayst &parse_trees,
1006-
symbol_tablet &symbol_table,
1006+
symbol_table_baset &symbol_table,
10071007
message_handlert &message_handler,
10081008
size_t max_array_length,
10091009
method_bytecodet &method_bytecode,
@@ -1188,7 +1188,7 @@ void convert_java_annotations(
11881188
/// corresponding outer classes.
11891189
void mark_java_implicitly_generic_class_type(
11901190
const irep_idt &class_name,
1191-
symbol_tablet &symbol_table)
1191+
symbol_table_baset &symbol_table)
11921192
{
11931193
const std::string qualified_class_name = "java::" + id2string(class_name);
11941194
PRECONDITION(symbol_table.has_symbol(qualified_class_name));

0 commit comments

Comments
 (0)