Skip to content

Commit 513b705

Browse files
committed
Replace owning raw pointers with unique_ptr
1 parent c50f3d5 commit 513b705

Some content is hidden

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

59 files changed

+415
-369
lines changed

src/analyses/ai.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Author: Daniel Kroening, [email protected]
1818
#include <util/json.h>
1919
#include <util/xml.h>
2020
#include <util/expr.h>
21+
#include <util/make_unique.h>
2122

2223
#include <goto-programs/goto_model.h>
2324

@@ -334,7 +335,7 @@ class ai_baset
334335
const namespacet &ns)=0;
335336
virtual statet &get_state(locationt l)=0;
336337
virtual const statet &find_state(locationt l) const=0;
337-
virtual statet* make_temporary_state(const statet &s)=0;
338+
virtual std::unique_ptr<statet> make_temporary_state(const statet &s)=0;
338339
};
339340

340341
// domainT is expected to be derived from ai_domain_baseT
@@ -400,9 +401,9 @@ class ait:public ai_baset
400401
static_cast<const domainT &>(src), from, to);
401402
}
402403

403-
statet *make_temporary_state(const statet &s) override
404+
std::unique_ptr<statet> make_temporary_state(const statet &s) override
404405
{
405-
return new domainT(static_cast<const domainT &>(s));
406+
return util_make_unique<domainT>(static_cast<const domainT &>(s));
406407
}
407408

408409
void fixedpoint(

src/analyses/goto_rw.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Date: April 2010
1919
#include <util/endianness_map.h>
2020
#include <util/arith_tools.h>
2121
#include <util/simplify_expr.h>
22+
#include <util/make_unique.h>
2223

2324
#include <goto-programs/goto_functions.h>
2425

@@ -50,12 +51,12 @@ rw_range_sett::~rw_range_sett()
5051
for(rw_range_sett::objectst::iterator it=r_range_set.begin();
5152
it!=r_range_set.end();
5253
++it)
53-
delete it->second;
54+
it->second=nullptr;
5455

5556
for(rw_range_sett::objectst::iterator it=w_range_set.begin();
5657
it!=w_range_set.end();
5758
++it)
58-
delete it->second;
59+
it->second=nullptr;
5960
}
6061

6162
void rw_range_sett::output(std::ostream &out) const
@@ -462,14 +463,17 @@ void rw_range_sett::add(
462463
const range_spect &range_start,
463464
const range_spect &range_end)
464465
{
465-
objectst::iterator entry=(mode==get_modet::LHS_W ? w_range_set : r_range_set).
466-
insert(
467-
std::pair<const irep_idt&, range_domain_baset*>(identifier, 0)).first;
466+
objectst::iterator entry=
467+
(mode==get_modet::LHS_W?w_range_set:r_range_set)
468+
.insert(
469+
std::pair<const irep_idt &, std::unique_ptr<range_domain_baset>>(
470+
identifier, nullptr))
471+
.first;
468472

469-
if(entry->second==0)
470-
entry->second=new range_domaint();
473+
if(entry->second==nullptr)
474+
entry->second=util_make_unique<range_domaint>();
471475

472-
static_cast<range_domaint*>(entry->second)->push_back(
476+
static_cast<range_domaint&>(*entry->second).push_back(
473477
std::make_pair(range_start, range_end));
474478
}
475479

@@ -662,16 +666,18 @@ void rw_guarded_range_set_value_sett::add(
662666
const range_spect &range_start,
663667
const range_spect &range_end)
664668
{
665-
objectst::iterator entry=(mode==get_modet::LHS_W ? w_range_set : r_range_set).
666-
insert(
667-
std::pair<const irep_idt&, range_domain_baset*>(identifier, 0)).first;
668-
669-
if(entry->second==0)
670-
entry->second=new guarded_range_domaint();
671-
672-
static_cast<guarded_range_domaint*>(entry->second)->insert(
673-
std::make_pair(range_start,
674-
std::make_pair(range_end, guard.as_expr())));
669+
objectst::iterator entry=
670+
(mode==get_modet::LHS_W?w_range_set:r_range_set)
671+
.insert(
672+
std::pair<const irep_idt &, std::unique_ptr<range_domain_baset>>(
673+
identifier, nullptr))
674+
.first;
675+
676+
if(entry->second==nullptr)
677+
entry->second=util_make_unique<guarded_range_domaint>();
678+
679+
static_cast<guarded_range_domaint&>(*entry->second).insert(
680+
std::make_pair(range_start, std::make_pair(range_end, guard.as_expr())));
675681
}
676682

677683
void goto_rw(goto_programt::const_targett target,

src/analyses/goto_rw.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Date: April 2010
1515
#include <map>
1616
#include <ostream>
1717
#include <limits>
18+
#include <memory> // unique_ptr
1819

1920
#include <util/guard.h>
2021

@@ -83,10 +84,10 @@ class rw_range_sett
8384
{
8485
public:
8586
#ifdef USE_DSTRING
86-
typedef std::map<irep_idt, range_domain_baset*> objectst;
87+
typedef std::map<irep_idt, std::unique_ptr<range_domain_baset>> objectst;
8788
#else
88-
typedef std::unordered_map<irep_idt, range_domain_baset*, string_hash>
89-
objectst;
89+
typedef std::unordered_map<
90+
irep_idt, std::unique_ptr<range_domain_baset>, string_hash> objectst;
9091
#endif
9192

9293
virtual ~rw_range_sett();
@@ -108,8 +109,8 @@ class rw_range_sett
108109

109110
const range_domaint &get_ranges(objectst::const_iterator it) const
110111
{
111-
assert(dynamic_cast<range_domaint*>(it->second)!=0);
112-
return *static_cast<range_domaint*>(it->second);
112+
assert(dynamic_cast<range_domaint*>(it->second.get()));
113+
return static_cast<const range_domaint &>(*it->second);
113114
}
114115

115116
enum class get_modet { LHS_W, READ };
@@ -277,8 +278,8 @@ class rw_guarded_range_set_value_sett:public rw_range_set_value_sett
277278

278279
const guarded_range_domaint &get_ranges(objectst::const_iterator it) const
279280
{
280-
assert(dynamic_cast<guarded_range_domaint*>(it->second)!=0);
281-
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);
282283
}
283284

284285
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
@@ -16,6 +16,7 @@ Author: Daniel Kroening, [email protected]
1616
#include <memory>
1717

1818
#include <util/union_find.h>
19+
#include <util/make_unique.h>
1920

2021
#include "locals.h"
2122
#include "dirty.h"
@@ -117,8 +118,7 @@ class local_may_alias_factoryt
117118
goto_functionst::function_mapt::const_iterator f_it2=
118119
goto_functions->function_map.find(fkt);
119120
assert(f_it2!=goto_functions->function_map.end());
120-
return *(fkt_map[fkt]=std::unique_ptr<local_may_aliast>(
121-
new local_may_aliast(f_it2->second)));
121+
return *(fkt_map[fkt]=util_make_unique<local_may_aliast>(f_it2->second));
122122
}
123123

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

src/analyses/reaching_definitions.cpp

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

1616
#include <util/pointer_offset_size.h>
1717
#include <util/prefix.h>
18+
#include <util/make_unique.h>
1819

1920
#include <pointer-analysis/value_set_analysis_fi.h>
2021

@@ -23,6 +24,15 @@ Date: February 2013
2324

2425
#include "reaching_definitions.h"
2526

27+
reaching_definitions_analysist::reaching_definitions_analysist(
28+
const namespacet &_ns):
29+
concurrency_aware_ait<rd_range_domaint>(),
30+
ns(_ns)
31+
{
32+
}
33+
34+
reaching_definitions_analysist::~reaching_definitions_analysist()=default;
35+
2636
void rd_range_domaint::populate_cache(const irep_idt &identifier) const
2737
{
2838
assert(bv_container);
@@ -711,26 +721,16 @@ const rd_range_domaint::ranges_at_loct &rd_range_domaint::get(
711721
return entry->second;
712722
}
713723

714-
reaching_definitions_analysist::~reaching_definitions_analysist()
715-
{
716-
if(is_dirty)
717-
delete is_dirty;
718-
if(is_threaded)
719-
delete is_threaded;
720-
if(value_sets)
721-
delete value_sets;
722-
}
723-
724724
void reaching_definitions_analysist::initialize(
725725
const goto_functionst &goto_functions)
726726
{
727-
value_set_analysis_fit *value_sets_=new value_set_analysis_fit(ns);
727+
auto value_sets_=util_make_unique<value_set_analysis_fit>(ns);
728728
(*value_sets_)(goto_functions);
729-
value_sets=value_sets_;
729+
value_sets=std::move(value_sets_);
730730

731-
is_threaded=new is_threadedt(goto_functions);
731+
is_threaded=util_make_unique<is_threadedt>(goto_functions);
732732

733-
is_dirty=new dirtyt(goto_functions);
733+
is_dirty=util_make_unique<dirtyt>(goto_functions);
734734

735735
concurrency_aware_ait<rd_range_domaint>::initialize(goto_functions);
736736
}

src/analyses/reaching_definitions.h

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -240,16 +240,9 @@ class reaching_definitions_analysist:
240240
{
241241
public:
242242
// constructor
243-
explicit reaching_definitions_analysist(const namespacet &_ns):
244-
concurrency_aware_ait<rd_range_domaint>(),
245-
ns(_ns),
246-
value_sets(0),
247-
is_threaded(0),
248-
is_dirty(0)
249-
{
250-
}
243+
explicit reaching_definitions_analysist(const namespacet &_ns);
251244

252-
virtual ~reaching_definitions_analysist();
245+
~reaching_definitions_analysist();
253246

254247
virtual void initialize(
255248
const goto_functionst &goto_functions);
@@ -286,9 +279,9 @@ class reaching_definitions_analysist:
286279

287280
protected:
288281
const namespacet &ns;
289-
value_setst * value_sets;
290-
is_threadedt * is_threaded;
291-
dirtyt * is_dirty;
282+
std::unique_ptr<value_setst> value_sets;
283+
std::unique_ptr<is_threadedt> is_threaded;
284+
std::unique_ptr<dirtyt> is_dirty;
292285
};
293286

294287
#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
@@ -20,6 +20,8 @@ Author: Daniel Kroening, [email protected]
2020
#include <iosfwd>
2121
#include <unordered_set>
2222

23+
#include <util/make_unique.h>
24+
2325
#include <goto-programs/goto_functions.h>
2426

2527
// don't use me -- I am just a base class
@@ -252,7 +254,7 @@ class static_analysis_baset
252254
virtual void generate_state(locationt l)=0;
253255
virtual statet &get_state(locationt l)=0;
254256
virtual const statet &get_state(locationt l) const=0;
255-
virtual statet* make_temporary_state(statet &s)=0;
257+
virtual std::unique_ptr<statet> make_temporary_state(statet &s)=0;
256258

257259
typedef domain_baset::expr_sett expr_sett;
258260

@@ -331,9 +333,9 @@ class static_analysist:public static_analysis_baset
331333
return static_cast<T &>(a).merge(static_cast<const T &>(b), to);
332334
}
333335

334-
virtual statet *make_temporary_state(statet &s)
336+
virtual std::unique_ptr<statet> make_temporary_state(statet &s)
335337
{
336-
return new T(static_cast<T &>(s));
338+
return util_make_unique<T>(static_cast<T &>(s));
337339
}
338340

339341
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
@@ -139,9 +139,9 @@ void ansi_c_languaget::show_parse(std::ostream &out)
139139
parse_tree.output(out);
140140
}
141141

142-
languaget *new_ansi_c_language()
142+
std::unique_ptr<languaget> new_ansi_c_language()
143143
{
144-
return new ansi_c_languaget;
144+
return util_make_unique<ansi_c_languaget>();
145145
}
146146

147147
bool ansi_c_languaget::from_expr(

src/ansi-c/ansi_c_language.h

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

1515
#include <util/language.h>
16+
#include <util/make_unique.h>
1617

1718
#include "ansi_c_parse_tree.h"
1819

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

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

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

81-
languaget *new_ansi_c_language();
82+
std::unique_ptr<languaget> new_ansi_c_language();
8283

8384
#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
@@ -314,11 +314,11 @@ safety_checkert::resultt bmct::run(
314314
std::unique_ptr<memory_model_baset> memory_model;
315315

316316
if(mm.empty() || mm=="sc")
317-
memory_model=std::unique_ptr<memory_model_baset>(new memory_model_sct(ns));
317+
memory_model=util_make_unique<memory_model_sct>(ns);
318318
else if(mm=="tso")
319-
memory_model=std::unique_ptr<memory_model_baset>(new memory_model_tsot(ns));
319+
memory_model=util_make_unique<memory_model_tsot>(ns);
320320
else if(mm=="pso")
321-
memory_model=std::unique_ptr<memory_model_baset>(new memory_model_psot(ns));
321+
memory_model=util_make_unique<memory_model_psot>(ns);
322322
else
323323
{
324324
error() << "Invalid memory model " << mm

src/cbmc/cbmc_main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ extern unsigned long long irep_cmp_ne_cnt;
3434
#ifdef _MSC_VER
3535
int wmain(int argc, const wchar_t **argv_wide)
3636
{
37-
const char **argv=narrow_argv(argc, argv_wide);
37+
auto vec=narrow_argv(argc, argv_wide);
38+
auto argv=vec.data();
3839
#else
3940
int main(int argc, const char **argv)
4041
{

src/cbmc/cbmc_parse_options.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -601,9 +601,9 @@ int cbmc_parse_optionst::get_goto_program(
601601
return 6;
602602
}
603603

604-
languaget *language=get_language_from_filename(filename);
604+
auto language=get_language_from_filename(filename);
605605

606-
if(language==NULL)
606+
if(!language)
607607
{
608608
error() << "failed to figure out type of file `"
609609
<< filename << "'" << eom;
@@ -750,19 +750,17 @@ void cbmc_parse_optionst::preprocessing()
750750
return;
751751
}
752752

753-
languaget *ptr=get_language_from_filename(filename);
753+
auto ptr=get_language_from_filename(filename);
754754

755-
if(ptr==NULL)
755+
if(!ptr)
756756
{
757757
error() << "failed to figure out type of file" << eom;
758758
return;
759759
}
760760

761761
ptr->set_message_handler(get_message_handler());
762762

763-
std::unique_ptr<languaget> language(ptr);
764-
765-
if(language->preprocess(infile, filename, std::cout))
763+
if(ptr->preprocess(infile, filename, std::cout))
766764
error() << "PREPROCESSING ERROR" << eom;
767765
}
768766

0 commit comments

Comments
 (0)