summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2018-09-30 17:54:39 +0800
committerJohn Hodge <tpg@ucc.asn.au>2018-09-30 17:54:39 +0800
commitfe8018c3b2e2be2c3153a5c1a1bb73cd9c6ca370 (patch)
treebcf1614ce3179742544a00306cd0789ad52b8e60 /src/trans/codegen_c.cpp
parentab375213d5ef8bb3b3b9cba42a8cc95c5acb6ee5 (diff)
downloadmrust-fe8018c3b2e2be2c3153a5c1a1bb73cd9c6ca370.tar.gz
Codegen C - Run destructors on ZSTs in enums
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r--src/trans/codegen_c.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index ed6c9100..e27c30d8 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -1449,11 +1449,7 @@ namespace {
{
var_lv.as_Downcast().variant_index = var_idx;
m_of << "\tcase " << e->values[var_idx] << ":\n";
- if( this->type_is_bad_zst(repr->fields[var_idx].ty) ) {
- }
- else {
- emit_destructor_call(var_lv, repr->fields[var_idx].ty, /*unsized_valid=*/false, /*indent=*/2);
- }
+ emit_destructor_call(var_lv, repr->fields[var_idx].ty, /*unsized_valid=*/false, /*indent=*/2);
m_of << "\t\tbreak;\n";
}
m_of << "\t}\n";
@@ -4991,9 +4987,14 @@ namespace {
{
case MetadataType::None:
- if( this->type_is_bad_zst(ty) && slot.is_Field() )
+ if( this->type_is_bad_zst(ty) && (slot.is_Field() || slot.is_Downcast()) )
{
- m_of << indent << Trans_Mangle(p) << "((void*)&"; emit_lvalue(*slot.as_Field().val); m_of << ");\n";
+ m_of << indent << Trans_Mangle(p) << "((void*)&";
+ if( slot.is_Field() )
+ emit_lvalue(*slot.as_Field().val);
+ else
+ emit_lvalue(*slot.as_Downcast().val);
+ m_of << ");\n";
}
else
{