Skip to content

Commit c2d2184

Browse files
committed
Replace owning raw pointers with unique_ptr
1 parent ae0ab67 commit c2d2184

Some content is hidden

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

58 files changed

+360
-403
lines changed

src/analyses/ai.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Author: Daniel Kroening, [email protected]
99
#ifndef CPROVER_ANALYSES_AI_H
1010
#define CPROVER_ANALYSES_AI_H
1111

12+
#include "util/make_unique.h"
13+
1214
#include <map>
1315
#include <iosfwd>
1416
#include <sstream>
@@ -327,7 +329,7 @@ class ai_baset
327329
const namespacet &ns)=0;
328330
virtual statet &get_state(locationt l)=0;
329331
virtual const statet &find_state(locationt l) const=0;
330-
virtual statet* make_temporary_state(const statet &s)=0;
332+
virtual std::unique_ptr<statet> make_temporary_state(const statet &s)=0;
331333
};
332334

333335
// domainT is expected to be derived from ai_domain_baseT
@@ -393,9 +395,9 @@ class ait:public ai_baset
393395
static_cast<const domainT &>(src), from, to);
394396
}
395397

396-
statet *make_temporary_state(const statet &s) override
398+
std::unique_ptr<statet> make_temporary_state(const statet &s) override
397399
{
398-
return new domainT(static_cast<const domainT &>(s));
400+
return util_make_unique<domainT>(static_cast<const domainT &>(s));
399401
}
400402

401403
void fixedpoint(

src/analyses/goto_rw.cpp

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Date: April 2010
88
99
\*******************************************************************/
1010

11+
#include "util/make_unique.h"
12+
1113
#include <limits>
1214
#include <algorithm>
1315

@@ -85,12 +87,12 @@ rw_range_sett::~rw_range_sett()
8587
for(rw_range_sett::objectst::iterator it=r_range_set.begin();
8688
it!=r_range_set.end();
8789
++it)
88-
delete it->second;
90+
it->second=nullptr;
8991

9092
for(rw_range_sett::objectst::iterator it=w_range_set.begin();
9193
it!=w_range_set.end();
9294
++it)
93-
delete it->second;
95+
it->second=nullptr;
9496
}
9597

9698
/*******************************************************************\
@@ -652,14 +654,15 @@ void rw_range_sett::add(
652654
const range_spect &range_start,
653655
const range_spect &range_end)
654656
{
655-
objectst::iterator entry=(mode==LHS_W ? w_range_set : r_range_set).
656-
insert(
657-
std::pair<const irep_idt&, range_domain_baset*>(identifier, 0)).first;
657+
objectst::iterator entry=
658+
(mode==LHS_W ? w_range_set : r_range_set).insert(
659+
std::pair<const irep_idt&, std::unique_ptr<range_domain_baset>>(
660+
identifier, nullptr)).first;
658661

659-
if(entry->second==0)
660-
entry->second=new range_domaint();
662+
if(entry->second==nullptr)
663+
entry->second=util_make_unique<range_domaint>();
661664

662-
static_cast<range_domaint*>(entry->second)->push_back(
665+
static_cast<range_domaint&>(*entry->second).push_back(
663666
std::make_pair(range_start, range_end));
664667
}
665668

@@ -936,16 +939,16 @@ void rw_guarded_range_set_value_sett::add(
936939
const range_spect &range_start,
937940
const range_spect &range_end)
938941
{
939-
objectst::iterator entry=(mode==LHS_W ? w_range_set : r_range_set).
940-
insert(
941-
std::pair<const irep_idt&, range_domain_baset*>(identifier, 0)).first;
942+
objectst::iterator entry=
943+
(mode==LHS_W ? w_range_set : r_range_set).insert(
944+
std::pair<const irep_idt&, std::unique_ptr<range_domain_baset>>(
945+
identifier, nullptr)).first;
942946

943-
if(entry->second==0)
944-
entry->second=new guarded_range_domaint();
947+
if(entry->second==nullptr)
948+
entry->second=util_make_unique<guarded_range_domaint>();
945949

946-
static_cast<guarded_range_domaint*>(entry->second)->insert(
947-
std::make_pair(range_start,
948-
std::make_pair(range_end, guard.as_expr())));
950+
static_cast<guarded_range_domaint&>(*entry->second).insert(
951+
std::make_pair(range_start, std::make_pair(range_end, guard.as_expr())));
949952
}
950953

951954
/*******************************************************************\

src/analyses/goto_rw.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ Date: April 2010
1919

2020
#include <goto-programs/goto_program.h>
2121

22+
#include <memory> // unique_ptr
23+
2224
#define forall_rw_range_set_r_objects(it, rw_set) \
2325
for(rw_range_sett::objectst::const_iterator it=(rw_set).get_r_set().begin(); \
2426
it!=(rw_set).get_r_set().end(); ++it)
@@ -82,10 +84,10 @@ class rw_range_sett
8284
{
8385
public:
8486
#ifdef USE_DSTRING
85-
typedef std::map<irep_idt, range_domain_baset*> objectst;
87+
typedef std::map<irep_idt, std::unique_ptr<range_domain_baset>> objectst;
8688
#else
87-
typedef std::unordered_map<irep_idt, range_domain_baset*, string_hash>
88-
objectst;
89+
typedef std::unordered_map<
90+
irep_idt, std::unique_ptr<range_domain_baset>, string_hash> objectst;
8991
#endif
9092

9193
virtual ~rw_range_sett();
@@ -107,8 +109,8 @@ class rw_range_sett
107109

108110
const range_domaint &get_ranges(objectst::const_iterator it) const
109111
{
110-
assert(dynamic_cast<range_domaint*>(it->second)!=0);
111-
return *static_cast<range_domaint*>(it->second);
112+
assert(dynamic_cast<range_domaint*>(it->second.get())!=nullptr);
113+
return static_cast<const range_domaint &>(*it->second);
112114
}
113115

114116
typedef enum { LHS_W, READ } get_modet;
@@ -276,8 +278,8 @@ class rw_guarded_range_set_value_sett:public rw_range_set_value_sett
276278

277279
const guarded_range_domaint &get_ranges(objectst::const_iterator it) const
278280
{
279-
assert(dynamic_cast<guarded_range_domaint*>(it->second)!=0);
280-
return *static_cast<guarded_range_domaint*>(it->second);
281+
assert(dynamic_cast<guarded_range_domaint*>(it->second.get())!=nullptr);
282+
return static_cast<const guarded_range_domaint &>(*it->second);
281283
}
282284

283285
virtual void get_objects_rec(

src/analyses/local_may_alias.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Author: Daniel Kroening, [email protected]
99
#ifndef CPROVER_ANALYSES_LOCAL_MAY_ALIAS_H
1010
#define CPROVER_ANALYSES_LOCAL_MAY_ALIAS_H
1111

12+
#include "util/make_unique.h"
1213
#include <stack>
1314
#include <memory>
1415

@@ -122,8 +123,7 @@ class local_may_alias_factoryt
122123
goto_functionst::function_mapt::const_iterator f_it2=
123124
goto_functions->function_map.find(fkt);
124125
assert(f_it2!=goto_functions->function_map.end());
125-
return *(fkt_map[fkt]=std::unique_ptr<local_may_aliast>(
126-
new local_may_aliast(f_it2->second)));
126+
return *(fkt_map[fkt]=util_make_unique<local_may_aliast>(f_it2->second));
127127
}
128128

129129
local_may_aliast &operator()(goto_programt::const_targett t)

src/analyses/reaching_definitions.cpp

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Date: February 2013
1111

1212
#include <util/pointer_offset_size.h>
1313
#include <util/prefix.h>
14+
#include "util/make_unique.h"
1415

1516
#include <pointer-analysis/value_set_analysis_fi.h>
1617

@@ -19,6 +20,16 @@ Date: February 2013
1920

2021
#include "reaching_definitions.h"
2122

23+
reaching_definitions_analysist::reaching_definitions_analysist(
24+
const namespacet &_ns):
25+
concurrency_aware_ait<rd_range_domaint>(),
26+
ns(_ns)
27+
{
28+
}
29+
30+
31+
reaching_definitions_analysist::~reaching_definitions_analysist()=default;
32+
2233
/*******************************************************************\
2334
2435
Function: rd_range_domaint::populate_cache
@@ -886,28 +897,6 @@ const rd_range_domaint::ranges_at_loct &rd_range_domaint::get(
886897

887898
/*******************************************************************\
888899
889-
Function: reaching_definitions_analysist::~reaching_definitions_analysist
890-
891-
Inputs:
892-
893-
Outputs:
894-
895-
Purpose:
896-
897-
\*******************************************************************/
898-
899-
reaching_definitions_analysist::~reaching_definitions_analysist()
900-
{
901-
if(is_dirty)
902-
delete is_dirty;
903-
if(is_threaded)
904-
delete is_threaded;
905-
if(value_sets)
906-
delete value_sets;
907-
}
908-
909-
/*******************************************************************\
910-
911900
Function: reaching_definitions_analysist::initialize
912901
913902
Inputs:
@@ -921,13 +910,13 @@ Function: reaching_definitions_analysist::initialize
921910
void reaching_definitions_analysist::initialize(
922911
const goto_functionst &goto_functions)
923912
{
924-
value_set_analysis_fit *value_sets_=new value_set_analysis_fit(ns);
913+
auto value_sets_=util_make_unique<value_set_analysis_fit>(ns);
925914
(*value_sets_)(goto_functions);
926-
value_sets=value_sets_;
915+
value_sets=std::move(value_sets_);
927916

928-
is_threaded=new is_threadedt(goto_functions);
917+
is_threaded=util_make_unique<is_threadedt>(goto_functions);
929918

930-
is_dirty=new dirtyt(goto_functions);
919+
is_dirty=util_make_unique<dirtyt>(goto_functions);
931920

932921
concurrency_aware_ait<rd_range_domaint>::initialize(goto_functions);
933922
}

src/analyses/reaching_definitions.h

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -236,16 +236,9 @@ class reaching_definitions_analysist:
236236
{
237237
public:
238238
// constructor
239-
explicit reaching_definitions_analysist(const namespacet &_ns):
240-
concurrency_aware_ait<rd_range_domaint>(),
241-
ns(_ns),
242-
value_sets(0),
243-
is_threaded(0),
244-
is_dirty(0)
245-
{
246-
}
239+
explicit reaching_definitions_analysist(const namespacet &_ns);
247240

248-
virtual ~reaching_definitions_analysist();
241+
~reaching_definitions_analysist();
249242

250243
virtual void initialize(
251244
const goto_functionst &goto_functions);
@@ -282,9 +275,9 @@ class reaching_definitions_analysist:
282275

283276
protected:
284277
const namespacet &ns;
285-
value_setst * value_sets;
286-
is_threadedt * is_threaded;
287-
dirtyt * is_dirty;
278+
std::unique_ptr<value_setst> value_sets;
279+
std::unique_ptr<is_threadedt> is_threaded;
280+
std::unique_ptr<dirtyt> is_dirty;
288281
};
289282

290283
#endif // CPROVER_ANALYSES_REACHING_DEFINITIONS_H

src/analyses/static_analysis.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Author: Daniel Kroening, [email protected]
1313
#error Deprecated, use ai.h instead
1414
#endif
1515

16+
#include "util/make_unique.h"
17+
1618
#include <map>
1719
#include <iosfwd>
1820
#include <unordered_set>
@@ -249,7 +251,7 @@ class static_analysis_baset
249251
virtual void generate_state(locationt l)=0;
250252
virtual statet &get_state(locationt l)=0;
251253
virtual const statet &get_state(locationt l) const=0;
252-
virtual statet* make_temporary_state(statet &s)=0;
254+
virtual std::unique_ptr<statet> make_temporary_state(statet &s)=0;
253255

254256
typedef domain_baset::expr_sett expr_sett;
255257

@@ -328,9 +330,9 @@ class static_analysist:public static_analysis_baset
328330
return static_cast<T &>(a).merge(static_cast<const T &>(b), to);
329331
}
330332

331-
virtual statet *make_temporary_state(statet &s)
333+
virtual std::unique_ptr<statet> make_temporary_state(statet &s)
332334
{
333-
return new T(static_cast<T &>(s));
335+
return util_make_unique<T>(static_cast<T &>(s));
334336
}
335337

336338
virtual void generate_state(locationt l)

src/ansi-c/ansi_c_language.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,9 @@ Function: new_ansi_c_language
231231
232232
\*******************************************************************/
233233

234-
languaget *new_ansi_c_language()
234+
std::unique_ptr<languaget> new_ansi_c_language()
235235
{
236-
return new ansi_c_languaget;
236+
return util_make_unique<ansi_c_languaget>();
237237
}
238238

239239
/*******************************************************************\

src/ansi-c/ansi_c_language.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Author: Daniel Kroening, [email protected]
1212
/*! \defgroup gr_ansi_c ANSI-C front-end */
1313

1414
#include <util/language.h>
15+
#include "util/make_unique.h"
1516

1617
#include "ansi_c_parse_tree.h"
1718

@@ -63,8 +64,8 @@ class ansi_c_languaget:public languaget
6364
exprt &expr,
6465
const namespacet &ns) override;
6566

66-
languaget *new_language() override
67-
{ return new ansi_c_languaget; }
67+
std::unique_ptr<languaget> new_language() override
68+
{ return util_make_unique<ansi_c_languaget>(); }
6869

6970
std::string id() const override { return "C"; }
7071
std::string description() const override { return "ANSI-C 99"; }
@@ -77,6 +78,6 @@ class ansi_c_languaget:public languaget
7778
std::string parse_path;
7879
};
7980

80-
languaget *new_ansi_c_language();
81+
std::unique_ptr<languaget> new_ansi_c_language();
8182

8283
#endif // CPROVER_ANSI_C_ANSI_C_LANGUAGE_H

src/cbmc/bmc.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -417,11 +417,11 @@ safety_checkert::resultt bmct::run(
417417
std::unique_ptr<memory_model_baset> memory_model;
418418

419419
if(mm.empty() || mm=="sc")
420-
memory_model=std::unique_ptr<memory_model_baset>(new memory_model_sct(ns));
420+
memory_model=util_make_unique<memory_model_sct>(ns);
421421
else if(mm=="tso")
422-
memory_model=std::unique_ptr<memory_model_baset>(new memory_model_tsot(ns));
422+
memory_model=util_make_unique<memory_model_tsot>(ns);
423423
else if(mm=="pso")
424-
memory_model=std::unique_ptr<memory_model_baset>(new memory_model_psot(ns));
424+
memory_model=util_make_unique<memory_model_psot>(ns);
425425
else
426426
{
427427
error() << "Invalid memory model " << mm

src/cbmc/cbmc_main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ extern unsigned long long irep_cmp_ne_cnt;
4343
#ifdef _MSC_VER
4444
int wmain(int argc, const wchar_t **argv_wide)
4545
{
46-
const char **argv=narrow_argv(argc, argv_wide);
46+
auto vec=narrow_argv(argc, argv_wide);
47+
auto argv=vec.data();
4748
#else
4849
int main(int argc, const char **argv)
4950
{

src/cbmc/cbmc_parse_options.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -650,9 +650,9 @@ int cbmc_parse_optionst::get_goto_program(
650650
return 6;
651651
}
652652

653-
languaget *language=get_language_from_filename(filename);
653+
auto language=get_language_from_filename(filename);
654654

655-
if(language==NULL)
655+
if(!language)
656656
{
657657
error() << "failed to figure out type of file `"
658658
<< filename << "'" << eom;
@@ -811,19 +811,17 @@ void cbmc_parse_optionst::preprocessing()
811811
return;
812812
}
813813

814-
languaget *ptr=get_language_from_filename(filename);
814+
auto ptr=get_language_from_filename(filename);
815815

816-
if(ptr==NULL)
816+
if(!ptr)
817817
{
818818
error() << "failed to figure out type of file" << eom;
819819
return;
820820
}
821821

822822
ptr->set_message_handler(get_message_handler());
823823

824-
std::unique_ptr<languaget> language(ptr);
825-
826-
if(language->preprocess(infile, filename, std::cout))
824+
if(ptr->preprocess(infile, filename, std::cout))
827825
error() << "PREPROCESSING ERROR" << eom;
828826
}
829827

0 commit comments

Comments
 (0)