Skip to content

Commit 60e847c

Browse files
committed
Replace nil_typet by uninitialized_typet in C++ type checker
A typechecker is a very peculiar piece of software, it's ok to use low-level hacks here. The typechecker itself will later on test .is_nil() and will replace it by a proper type.
1 parent 1c22089 commit 60e847c

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

src/cpp/cpp_parse_tree.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,12 @@ class cpp_parse_treet
2828
void clear();
2929
};
3030

31+
class uninitialized_typet : public typet
32+
{
33+
public:
34+
uninitialized_typet() : typet(static_cast<const typet &>(get_nil_irep()))
35+
{
36+
}
37+
};
38+
3139
#endif // CPROVER_CPP_CPP_PARSE_TREE_H

src/cpp/cpp_typecheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ class cpp_typecheckt:public c_typecheck_baset
218218
const symbolt &symbol,
219219
const cpp_template_args_tct &specialization_template_args,
220220
const cpp_template_args_tct &full_template_args,
221-
const typet &specialization=typet(ID_nil));
221+
const typet &specialization = uninitialized_typet{});
222222

223223
void elaborate_class_template(
224224
const source_locationt &source_location,

src/cpp/cpp_typecheck_constructor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ void cpp_typecheckt::default_cpctor(
166166
cpp_declaratort parameter_tor;
167167
parameter_tor.add(ID_value).make_nil();
168168
parameter_tor.set(ID_name, cpp_parameter);
169-
parameter_tor.type()=reference_type(nil_typet());
169+
parameter_tor.type() = reference_type(uninitialized_typet{});
170170
parameter_tor.add_source_location()=source_location;
171171

172172
// Parameter declaration
@@ -308,7 +308,7 @@ void cpp_typecheckt::default_assignop(
308308
declarator_name.get_sub().push_back(irept("="));
309309

310310
declarator_type.id(ID_function_type);
311-
declarator_type.subtype()=reference_type(nil_typet());
311+
declarator_type.subtype() = reference_type(uninitialized_typet{});
312312
declarator_type.subtype().add(ID_C_qualifier).make_nil();
313313

314314
exprt &args=static_cast<exprt&>(declarator.type().add(ID_parameters));
@@ -335,7 +335,7 @@ void cpp_typecheckt::default_assignop(
335335
args_decl_declor.name() = cpp_namet(arg_name, source_location);
336336
args_decl_declor.add_source_location()=source_location;
337337

338-
args_decl_declor.type()=pointer_type(typet(ID_nil));
338+
args_decl_declor.type() = pointer_type(uninitialized_typet{});
339339
args_decl_declor.type().set(ID_C_reference, true);
340340
args_decl_declor.value().make_nil();
341341
}

src/cpp/parse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2206,7 +2206,7 @@ bool Parser::rAttribute(typet &t)
22062206
if(lex.get_token(tk3)!=')')
22072207
return false;
22082208

2209-
vector_typet attr(nil_typet(), exp);
2209+
vector_typet attr(uninitialized_typet{}, exp);
22102210
attr.add_source_location()=exp.source_location();
22112211
merge_types(attr, t);
22122212
break;

0 commit comments

Comments
 (0)