authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-07 00:23:05-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-07 00:23:05-07:00
log4174134108fdef462c2483f4ca5aa40dd6398d55
tree5629fa9864ba6a265783c651343996b540266c66
parentfc310965197511ade998b5e6439c92a40af244d1

unreachable return type can cast to any other return type


2 files changed, 16 insertions(+), 2 deletions(-)

src/analyze.cpp+4-2
......@@ -1655,8 +1655,10 @@ static bool types_match_const_cast_only(TypeTableEntry *expected_type, TypeTable
16551655 if (expected_type->data.fn.fn_type_id.is_cold != actual_type->data.fn.fn_type_id.is_cold) {
16561656 return false;
16571657 }
1658 if (!types_match_const_cast_only(expected_type->data.fn.fn_type_id.return_type,
1659 actual_type->data.fn.fn_type_id.return_type))
1658 if (actual_type->data.fn.fn_type_id.return_type->id != TypeTableEntryIdUnreachable &&
1659 !types_match_const_cast_only(
1660 expected_type->data.fn.fn_type_id.return_type,
1661 actual_type->data.fn.fn_type_id.return_type))
16601662 {
16611663 return false;
16621664 }
test/self_hosted.zig+12
......@@ -196,3 +196,15 @@ fn rhs_maybe_unwrap_return() {
196196 const x = ?true;
197197 const y = x ?? return;
198198}
199
200
201#attribute("test")
202fn implicit_cast_fn_unreachable_return() {
203 wants_fn_with_void(fn_with_unreachable);
204}
205
206fn wants_fn_with_void(f: fn()) { }
207
208fn fn_with_unreachable() -> unreachable {
209 unreachable {}
210}