diff options
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r-- | src/trans/codegen_c.cpp | 15 |
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 { |