summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hir_typeck/expr_cs.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp
index 48f5095b..918f3cd7 100644
--- a/src/hir_typeck/expr_cs.cpp
+++ b/src/hir_typeck/expr_cs.cpp
@@ -681,9 +681,6 @@ namespace {
ERROR(node.span(), E0000, "Break statement with no acive loop");
}
- // NOTE: There's an RFC proposal (that's on track to be accepted) that allows `break value;`
- auto break_type = ::HIR::TypeRef::new_unit();
-
::HIR::ExprNode_Loop* loop_node_ptr;
if( node.m_label != "" )
{
@@ -701,7 +698,15 @@ namespace {
DEBUG("Break out of loop " << loop_node_ptr);
auto& loop_node = *loop_node_ptr;
loop_node.m_diverges = false;
- this->context.equate_types(node.span(), loop_node.m_res_type, break_type);
+
+ if( node.m_value ) {
+ this->context.add_ivars(node.m_value->m_res_type);
+ node.m_value->visit(*this);
+ this->context.equate_types(node.span(), loop_node.m_res_type, node.m_value->m_res_type);
+ }
+ else {
+ this->context.equate_types(node.span(), loop_node.m_res_type, ::HIR::TypeRef::new_unit());
+ }
}
}