diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/trans/codegen_c.cpp | 12 | ||||
-rw-r--r-- | src/trans/target.cpp | 12 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 1bf2d923..d208c2ca 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -1437,7 +1437,11 @@ namespace { MIR_ASSERT(*m_mir_res, ty.m_data.as_Path().binding.is_Enum(), ""); const auto* repr = Target_GetTypeRepr(sp, m_resolve, ty); const auto& enm = *ty.m_data.as_Path().binding.as_Enum(); - if( const auto* ve = repr->variants.opt_NonZero() ) + if( repr->variants.is_None() ) + { + m_of << "{}"; + } + else if( const auto* ve = repr->variants.opt_NonZero() ) { if( e.idx == ve->zero_variant ) { @@ -2527,7 +2531,11 @@ namespace { const auto& ty = mir_res.get_lvalue_type(tmp, e.dst); auto* repr = Target_GetTypeRepr(sp, m_resolve, ty); - if( const auto* re = repr->variants.opt_NonZero() ) + if( repr->variants.is_None() ) + { + emit_lvalue(e.dst); m_of << ".TAG = "; emit_param(ve.val); + } + else if( const auto* re = repr->variants.opt_NonZero() ) { MIR_ASSERT(*m_mir_res, ve.index < 2, ""); if( ve.index == re->zero_variant ) { diff --git a/src/trans/target.cpp b/src/trans/target.cpp index 09fc45b7..61789a75 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -729,7 +729,14 @@ namespace { { vals.push_back(i); } - rv.variants = TypeRepr::VariantMode::make_Values({ { mono_types.size(), tag_size, {} }, ::std::move(vals) }); + if( vals.size() > 1 ) + { + rv.variants = TypeRepr::VariantMode::make_Values({ { mono_types.size(), tag_size, {} }, ::std::move(vals) }); + } + else + { + // Leave the enum with NoVariants + } if( max_align > 0 ) { rv.size = (max_size + tag_size); @@ -755,8 +762,7 @@ namespace { case ::HIR::Enum::Repr::Rust: if( e.variants.size() == 0 ) { } - else if( e.variants.size() == 1 ) { - } + // NOTE: Even with 1 variant, we need to save the value else if( e.variants.size() <= 128 ) { rv.fields.push_back(TypeRepr::Field { 0, ::HIR::CoreType::I8 }); } |