Skip to content

Commit 531ee86

Browse files
author
Daniel Kroening
committed
introduce union_tag type instead of symbol_type
1 parent 5dc0cda commit 531ee86

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

src/ansi-c/c_typecheck_type.cpp

+17-5
Original file line numberDiff line numberDiff line change
@@ -820,12 +820,24 @@ void c_typecheck_baset::typecheck_compound_type(struct_union_typet &type)
820820
}
821821
}
822822

823-
symbol_typet symbol_type(identifier);
824-
symbol_type.add_source_location()=type.source_location();
823+
if(type.id() == ID_union)
824+
{
825+
union_tag_typet tag_type(identifier);
826+
tag_type.add_source_location() = type.source_location();
827+
828+
c_qualifierst original_qualifiers(type);
829+
type.swap(tag_type);
830+
original_qualifiers.write(type);
831+
}
832+
else
833+
{
834+
symbol_typet symbol_type(identifier);
835+
symbol_type.add_source_location() = type.source_location();
825836

826-
c_qualifierst original_qualifiers(type);
827-
type.swap(symbol_type);
828-
original_qualifiers.write(type);
837+
c_qualifierst original_qualifiers(type);
838+
type.swap(symbol_type);
839+
original_qualifiers.write(type);
840+
}
829841
}
830842

831843
void c_typecheck_baset::typecheck_compound_body(

src/cpp/cpp_typecheck_compound_type.cpp

+15-4
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ void cpp_typecheckt::typecheck_compound_type(
135135
cpp_scopet *dest_scope=nullptr;
136136
bool has_body=type.find(ID_body).is_not_nil();
137137
bool tag_only_declaration=type.get_bool(ID_C_tag_only_declaration);
138+
bool is_union=type.id()==ID_union;
138139

139140
if(!has_tag)
140141
{
@@ -263,10 +264,20 @@ void cpp_typecheckt::typecheck_compound_type(
263264
}
264265
}
265266

266-
// create type symbol
267-
symbol_typet symbol_type(symbol_name);
268-
qualifiers.write(symbol_type);
269-
type.swap(symbol_type);
267+
if(is_union)
268+
{
269+
// create union tag
270+
union_tag_typet tag_type(symbol_name);
271+
qualifiers.write(tag_type);
272+
type.swap(tag_type);
273+
}
274+
else
275+
{
276+
// create type symbol
277+
symbol_typet symbol_type(symbol_name);
278+
qualifiers.write(symbol_type);
279+
type.swap(symbol_type);
280+
}
270281
}
271282

272283
void cpp_typecheckt::typecheck_compound_declarator(

0 commit comments

Comments
 (0)