Skip to content

Commit f8b8f9e

Browse files
authored
Merge pull request #1154 from diffblue/pointer-cleanup
Pointer cleanup
2 parents 424ef50 + db71221 commit f8b8f9e

Some content is hidden

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

42 files changed

+256
-278
lines changed

src/ansi-c/ansi_c_entry_point.cpp

+15-15
Original file line numberDiff line numberDiff line change
@@ -327,16 +327,13 @@ bool ansi_c_entry_point(
327327
zero_string.type().set(ID_size, "infinity");
328328
exprt index(ID_index, char_type());
329329
index.copy_to_operands(zero_string, from_integer(0, uint_type()));
330-
exprt address_of("address_of", pointer_typet());
331-
address_of.type().subtype()=char_type();
332-
address_of.copy_to_operands(index);
330+
exprt address_of=address_of_exprt(index, pointer_type(char_type()));
333331
334332
if(argv_symbol.type.subtype()!=address_of.type())
335333
address_of.make_typecast(argv_symbol.type.subtype());
336334
337335
// assign argv[*] to the address of a string-object
338-
exprt array_of("array_of", argv_symbol.type);
339-
array_of.copy_to_operands(address_of);
336+
array_of_exprt array_of(address_of, argv_symbol.type);
340337
341338
init_code.copy_to_operands(
342339
code_assignt(argv_symbol.symbol_expr(), array_of));
@@ -400,17 +397,18 @@ bool ansi_c_entry_point(
400397

401398
{
402399
const exprt &arg1=parameters[1];
400+
const pointer_typet &pointer_type=
401+
to_pointer_type(arg1.type());
403402

404-
exprt index_expr(ID_index, arg1.type().subtype());
405-
index_expr.copy_to_operands(
403+
index_exprt index_expr(
406404
argv_symbol.symbol_expr(),
407-
from_integer(0, index_type()));
405+
from_integer(0, index_type()),
406+
pointer_type.subtype());
408407

409408
// disable bounds check on that one
410409
index_expr.set("bounds_check", false);
411410

412-
op1=exprt(ID_address_of, arg1.type());
413-
op1.move_to_operands(index_expr);
411+
op1=address_of_exprt(index_expr, pointer_type);
414412
}
415413

416414
// do we need envp?
@@ -420,13 +418,15 @@ bool ansi_c_entry_point(
420418
exprt &op2=operands[2];
421419

422420
const exprt &arg2=parameters[2];
421+
const pointer_typet &pointer_type=
422+
to_pointer_type(arg2.type());
423423

424-
exprt index_expr(ID_index, arg2.type().subtype());
425-
index_expr.copy_to_operands(
426-
envp_symbol.symbol_expr(), from_integer(0, index_type()));
424+
index_exprt index_expr(
425+
envp_symbol.symbol_expr(),
426+
from_integer(0, index_type()),
427+
pointer_type.subtype());
427428

428-
op2=exprt(ID_address_of, arg2.type());
429-
op2.move_to_operands(index_expr);
429+
op2=address_of_exprt(index_expr, pointer_type);
430430
}
431431
}
432432
}

src/ansi-c/c_typecheck_expr.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -834,11 +834,10 @@ void c_typecheck_baset::typecheck_expr_symbol(exprt &expr)
834834

835835
if(expr.type().id()==ID_code) // function designator
836836
{ // special case: this is sugar for &f
837-
exprt tmp(ID_address_of, pointer_type(expr.type()));
837+
address_of_exprt tmp(expr, pointer_type(expr.type()));
838838
tmp.set("#implicit", true);
839839
tmp.add_source_location()=expr.source_location();
840-
tmp.move_to_operands(expr);
841-
expr.swap(tmp);
840+
expr=tmp;
842841
}
843842
}
844843
}
@@ -1778,11 +1777,10 @@ void c_typecheck_baset::typecheck_expr_function_identifier(exprt &expr)
17781777
{
17791778
if(expr.type().id()==ID_code)
17801779
{
1781-
exprt tmp(ID_address_of, pointer_type(expr.type()));
1780+
address_of_exprt tmp(expr, pointer_type(expr.type()));
17821781
tmp.set(ID_C_implicit, true);
17831782
tmp.add_source_location()=expr.source_location();
1784-
tmp.move_to_operands(expr);
1785-
expr.swap(tmp);
1783+
expr=tmp;
17861784
}
17871785
}
17881786

src/ansi-c/c_typecheck_type.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -1498,9 +1498,7 @@ void c_typecheck_baset::adjust_function_parameter(typet &type) const
14981498
{
14991499
// see ISO/IEC 9899:1999 page 199 clause 8,
15001500
// may be hidden in typedef
1501-
pointer_typet tmp;
1502-
tmp.subtype()=type;
1503-
type.swap(tmp);
1501+
type=pointer_type(type);
15041502
}
15051503
else if(type.id()==ID_KnR)
15061504
{

src/cpp/cpp_constructor.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -289,10 +289,7 @@ codet cpp_typecheckt::cpp_constructor(
289289
assert(tmp_this.id()==ID_address_of
290290
&& tmp_this.op0().id()=="new_object");
291291

292-
exprt address_of(ID_address_of, typet(ID_pointer));
293-
address_of.type().subtype()=object_tc.type();
294-
address_of.copy_to_operands(object_tc);
295-
tmp_this.swap(address_of);
292+
tmp_this=address_of_exprt(object_tc);
296293

297294
if(block.operands().empty())
298295
return to_code(initializer);

src/cpp/cpp_convert_type.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,8 @@ void cpp_convert_typet::read_function_type(const typet &type)
251251
// see if it's an array type
252252
if(final_type.id()==ID_array)
253253
{
254-
final_type.id(ID_pointer);
255-
final_type.remove(ID_size);
254+
// turn into pointer type
255+
final_type=pointer_type(final_type.subtype());
256256
}
257257

258258
code_typet::parametert new_parameter(final_type);

src/cpp/cpp_destructor.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,7 @@ codet cpp_typecheckt::cpp_destructor(
142142
assert(tmp_this.id()==ID_address_of
143143
&& tmp_this.op0().id()=="new_object");
144144

145-
exprt address_of(ID_address_of, typet(ID_pointer));
146-
address_of.type().subtype()=object.type();
147-
address_of.copy_to_operands(object);
148-
tmp_this.swap(address_of);
145+
tmp_this=address_of_exprt(object, pointer_type(object.type()));
149146

150147
new_code.swap(initializer);
151148
}

src/cpp/cpp_typecheck_compound_type.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Author: Daniel Kroening, [email protected]
1616
#include <util/arith_tools.h>
1717
#include <util/simplify_expr.h>
1818
#include <util/std_types.h>
19+
#include <util/c_types.h>
1920

2021
#include <ansi-c/c_qualifiers.h>
2122

@@ -545,7 +546,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
545546

546547
// add a virtual-table pointer
547548
struct_typet::componentt compo;
548-
compo.type()=pointer_typet(symbol_typet(vt_name));
549+
compo.type()=pointer_type(symbol_typet(vt_name));
549550
compo.set_name(id2string(symbol.name) +"::@vtable_pointer");
550551
compo.set(ID_base_name, "@vtable_pointer");
551552
compo.set(
@@ -567,7 +568,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
567568

568569
// add an entry to the virtual table
569570
struct_typet::componentt vt_entry;
570-
vt_entry.type()=pointer_typet(component.type());
571+
vt_entry.type()=pointer_type(component.type());
571572
vt_entry.set_name(id2string(vtit->first)+"::"+virtual_name);
572573
vt_entry.set(ID_base_name, virtual_name);
573574
vt_entry.set(ID_pretty_name, virtual_name);
@@ -1353,7 +1354,7 @@ void cpp_typecheckt::add_this_to_method_type(
13531354
if(has_volatile(method_qualifier))
13541355
subtype.set(ID_C_volatile, true);
13551356

1356-
parameter.type()=pointer_typet(subtype);
1357+
parameter.type()=pointer_type(subtype);
13571358
}
13581359

13591360
void cpp_typecheckt::add_anonymous_members_to_scope(

0 commit comments

Comments
 (0)