Skip to content

Commit 2ae3449

Browse files
authored
Merge pull request #835 from reuk/no-raw-ptrs
Replace owning raw pointers
2 parents e9e413e + 7d5f115 commit 2ae3449

Some content is hidden

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

56 files changed

+428
-337
lines changed

src/analyses/ai.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ Author: Daniel Kroening, [email protected]
1212
#ifndef CPROVER_ANALYSES_AI_H
1313
#define CPROVER_ANALYSES_AI_H
1414

15-
#include <map>
1615
#include <iosfwd>
16+
#include <map>
17+
#include <memory>
1718

1819
#include <util/json.h>
1920
#include <util/xml.h>
2021
#include <util/expr.h>
22+
#include <util/make_unique.h>
2123

2224
#include <goto-programs/goto_model.h>
2325

@@ -334,7 +336,7 @@ class ai_baset
334336
const namespacet &ns)=0;
335337
virtual statet &get_state(locationt l)=0;
336338
virtual const statet &find_state(locationt l) const=0;
337-
virtual statet* make_temporary_state(const statet &s)=0;
339+
virtual std::unique_ptr<statet> make_temporary_state(const statet &s)=0;
338340
};
339341

340342
// domainT is expected to be derived from ai_domain_baseT
@@ -400,9 +402,9 @@ class ait:public ai_baset
400402
static_cast<const domainT &>(src), from, to);
401403
}
402404

403-
statet *make_temporary_state(const statet &s) override
405+
std::unique_ptr<statet> make_temporary_state(const statet &s) override
404406
{
405-
return new domainT(static_cast<const domainT &>(s));
407+
return util_make_unique<domainT>(static_cast<const domainT &>(s));
406408
}
407409

408410
void fixedpoint(

src/analyses/goto_rw.cpp

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ Date: April 2010
1010

1111
#include "goto_rw.h"
1212

13-
#include <limits>
1413
#include <algorithm>
14+
#include <limits>
15+
#include <memory>
1516

1617
#include <util/std_code.h>
1718
#include <util/std_expr.h>
@@ -20,6 +21,7 @@ Date: April 2010
2021
#include <util/endianness_map.h>
2122
#include <util/arith_tools.h>
2223
#include <util/simplify_expr.h>
24+
#include <util/make_unique.h>
2325

2426
#include <goto-programs/goto_functions.h>
2527

@@ -49,12 +51,12 @@ rw_range_sett::~rw_range_sett()
4951
for(rw_range_sett::objectst::iterator it=r_range_set.begin();
5052
it!=r_range_set.end();
5153
++it)
52-
delete it->second;
54+
it->second=nullptr;
5355

5456
for(rw_range_sett::objectst::iterator it=w_range_set.begin();
5557
it!=w_range_set.end();
5658
++it)
57-
delete it->second;
59+
it->second=nullptr;
5860
}
5961

6062
void rw_range_sett::output(std::ostream &out) const
@@ -461,16 +463,18 @@ void rw_range_sett::add(
461463
const range_spect &range_start,
462464
const range_spect &range_end)
463465
{
464-
objectst::iterator entry=(mode==get_modet::LHS_W ? w_range_set : r_range_set).
465-
insert(
466-
std::pair<const irep_idt&, range_domain_baset*>(
467-
identifier, nullptr)).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

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

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

476480
void rw_range_sett::get_objects_rec(
@@ -662,17 +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*>(
668-
identifier, nullptr)).first;
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;
669675

670676
if(entry->second==nullptr)
671-
entry->second=new guarded_range_domaint();
677+
entry->second=util_make_unique<guarded_range_domaint>();
672678

673-
static_cast<guarded_range_domaint*>(entry->second)->insert(
674-
std::make_pair(range_start,
675-
std::make_pair(range_end, guard.as_expr())));
679+
static_cast<guarded_range_domaint&>(*entry->second).insert(
680+
{range_start, {range_end, guard.as_expr()}});
676681
}
677682

678683
void goto_rw(goto_programt::const_targett target,

src/analyses/goto_rw.h

Lines changed: 9 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-
PRECONDITION(dynamic_cast<range_domaint*>(it->second)!=nullptr);
112-
return *static_cast<range_domaint*>(it->second);
112+
PRECONDITION(dynamic_cast<range_domaint*>(it->second.get())!=nullptr);
113+
return static_cast<const range_domaint &>(*it->second);
113114
}
114115

115116
enum class get_modet { LHS_W, READ };
@@ -277,8 +278,9 @@ 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-
PRECONDITION(dynamic_cast<guarded_range_domaint*>(it->second)!=nullptr);
281-
return *static_cast<guarded_range_domaint*>(it->second);
281+
PRECONDITION(
282+
dynamic_cast<guarded_range_domaint*>(it->second.get())!=nullptr);
283+
return static_cast<const guarded_range_domaint &>(*it->second);
282284
}
283285

284286
virtual void get_objects_rec(

src/analyses/local_may_alias.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ Author: Daniel Kroening, [email protected]
1212
#ifndef CPROVER_ANALYSES_LOCAL_MAY_ALIAS_H
1313
#define CPROVER_ANALYSES_LOCAL_MAY_ALIAS_H
1414

15-
#include <stack>
1615
#include <memory>
16+
#include <stack>
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: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,26 @@ Date: February 2013
1515

1616
#include "reaching_definitions.h"
1717

18+
#include <memory>
19+
1820
#include <util/pointer_offset_size.h>
1921
#include <util/prefix.h>
22+
#include <util/make_unique.h>
2023

2124
#include <pointer-analysis/value_set_analysis_fi.h>
2225

2326
#include "is_threaded.h"
2427
#include "dirty.h"
2528

29+
reaching_definitions_analysist::reaching_definitions_analysist(
30+
const namespacet &_ns):
31+
concurrency_aware_ait<rd_range_domaint>(),
32+
ns(_ns)
33+
{
34+
}
35+
36+
reaching_definitions_analysist::~reaching_definitions_analysist()=default;
37+
2638
void rd_range_domaint::populate_cache(const irep_idt &identifier) const
2739
{
2840
assert(bv_container);
@@ -717,26 +729,16 @@ const rd_range_domaint::ranges_at_loct &rd_range_domaint::get(
717729
return entry->second;
718730
}
719731

720-
reaching_definitions_analysist::~reaching_definitions_analysist()
721-
{
722-
if(is_dirty)
723-
delete is_dirty;
724-
if(is_threaded)
725-
delete is_threaded;
726-
if(value_sets)
727-
delete value_sets;
728-
}
729-
730732
void reaching_definitions_analysist::initialize(
731733
const goto_functionst &goto_functions)
732734
{
733-
value_set_analysis_fit *value_sets_=new value_set_analysis_fit(ns);
735+
auto value_sets_=util_make_unique<value_set_analysis_fit>(ns);
734736
(*value_sets_)(goto_functions);
735-
value_sets=value_sets_;
737+
value_sets=std::move(value_sets_);
736738

737-
is_threaded=new is_threadedt(goto_functions);
739+
is_threaded=util_make_unique<is_threadedt>(goto_functions);
738740

739-
is_dirty=new dirtyt(goto_functions);
741+
is_dirty=util_make_unique<dirtyt>(goto_functions);
740742

741743
concurrency_aware_ait<rd_range_domaint>::initialize(goto_functions);
742744
}

src/analyses/reaching_definitions.h

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,7 @@ class reaching_definitions_analysist:
241241
{
242242
public:
243243
// constructor
244-
explicit reaching_definitions_analysist(const namespacet &_ns):
245-
concurrency_aware_ait<rd_range_domaint>(),
246-
ns(_ns),
247-
value_sets(nullptr),
248-
is_threaded(nullptr),
249-
is_dirty(nullptr)
250-
{
251-
}
244+
explicit reaching_definitions_analysist(const namespacet &_ns);
252245

253246
virtual ~reaching_definitions_analysist();
254247

@@ -290,9 +283,9 @@ class reaching_definitions_analysist:
290283

291284
protected:
292285
const namespacet &ns;
293-
value_setst * value_sets;
294-
is_threadedt * is_threaded;
295-
dirtyt * is_dirty;
286+
std::unique_ptr<value_setst> value_sets;
287+
std::unique_ptr<is_threadedt> is_threaded;
288+
std::unique_ptr<dirtyt> is_dirty;
296289
};
297290

298291
#endif // CPROVER_ANALYSES_REACHING_DEFINITIONS_H

src/analyses/static_analysis.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ Author: Daniel Kroening, [email protected]
1616
#error Deprecated, use ai.h instead
1717
#endif
1818

19-
#include <map>
2019
#include <iosfwd>
20+
#include <map>
21+
#include <memory>
2122
#include <unordered_set>
2223

24+
#include <util/make_unique.h>
25+
2326
#include <goto-programs/goto_functions.h>
2427

2528
// don't use me -- I am just a base class
@@ -252,7 +255,7 @@ class static_analysis_baset
252255
virtual void generate_state(locationt l)=0;
253256
virtual statet &get_state(locationt l)=0;
254257
virtual const statet &get_state(locationt l) const=0;
255-
virtual statet* make_temporary_state(statet &s)=0;
258+
virtual std::unique_ptr<statet> make_temporary_state(statet &s)=0;
256259

257260
typedef domain_baset::expr_sett expr_sett;
258261

@@ -331,9 +334,9 @@ class static_analysist:public static_analysis_baset
331334
return static_cast<T &>(a).merge(static_cast<const T &>(b), to);
332335
}
333336

334-
virtual statet *make_temporary_state(statet &s)
337+
virtual std::unique_ptr<statet> make_temporary_state(statet &s)
335338
{
336-
return new T(static_cast<T &>(s));
339+
return util_make_unique<T>(static_cast<T &>(s));
337340
}
338341

339342
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: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ Author: Daniel Kroening, [email protected]
1010
#ifndef CPROVER_ANSI_C_ANSI_C_LANGUAGE_H
1111
#define CPROVER_ANSI_C_ANSI_C_LANGUAGE_H
1212

13+
/*! \defgroup gr_ansi_c ANSI-C front-end */
14+
15+
#include <memory>
16+
1317
#include <util/language.h>
18+
#include <util/make_unique.h>
1419

1520
#include "ansi_c_parse_tree.h"
1621

@@ -59,8 +64,8 @@ class ansi_c_languaget:public languaget
5964
exprt &expr,
6065
const namespacet &ns) override;
6166

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

6570
std::string id() const override { return "C"; }
6671
std::string description() const override { return "ANSI-C 99"; }
@@ -73,6 +78,6 @@ class ansi_c_languaget:public languaget
7378
std::string parse_path;
7479
};
7580

76-
languaget *new_ansi_c_language();
81+
std::unique_ptr<languaget> new_ansi_c_language();
7782

7883
#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: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ 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 narrow=to_c_str_array(std::begin(vec), std::end(vec));
39+
auto argv=narrow.data();
3840
#else
3941
int main(int argc, const char **argv)
4042
{

0 commit comments

Comments
 (0)