mirror of
https://github.com/ziglang/zig.git
synced 2025-02-13 08:00:20 +00:00
better compile error for error sets behind nullable
This commit is contained in:
parent
e514454c0e
commit
b85b68a7fd
17
src/ir.cpp
17
src/ir.cpp
@ -7934,11 +7934,20 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira,
|
||||
return ImplicitCastMatchResultReportedError;
|
||||
}
|
||||
|
||||
// implicit conversion from ?T to ?U
|
||||
if (expected_type->id == TypeTableEntryIdMaybe && actual_type->id == TypeTableEntryIdMaybe) {
|
||||
ImplicitCastMatchResult res = ir_types_match_with_implicit_cast(ira, expected_type->data.maybe.child_type,
|
||||
actual_type->data.maybe.child_type, value);
|
||||
if (res != ImplicitCastMatchResultNo)
|
||||
return res;
|
||||
}
|
||||
|
||||
// implicit conversion from non maybe type to maybe type
|
||||
if (expected_type->id == TypeTableEntryIdMaybe &&
|
||||
ir_types_match_with_implicit_cast(ira, expected_type->data.maybe.child_type, actual_type, value))
|
||||
{
|
||||
return ImplicitCastMatchResultYes;
|
||||
if (expected_type->id == TypeTableEntryIdMaybe) {
|
||||
ImplicitCastMatchResult res = ir_types_match_with_implicit_cast(ira, expected_type->data.maybe.child_type,
|
||||
actual_type, value);
|
||||
if (res != ImplicitCastMatchResultNo)
|
||||
return res;
|
||||
}
|
||||
|
||||
// implicit conversion from null literal to maybe type
|
||||
|
@ -1,6 +1,23 @@
|
||||
const tests = @import("tests.zig");
|
||||
|
||||
pub fn addCases(cases: *tests.CompileErrorContext) void {
|
||||
cases.add(
|
||||
"invalid deref on switch target",
|
||||
\\const NextError = error{NextError};
|
||||
\\const OtherError = error{OutOfMemory};
|
||||
\\
|
||||
\\export fn entry() void {
|
||||
\\ const a: ?NextError!i32 = foo();
|
||||
\\}
|
||||
\\
|
||||
\\fn foo() ?OtherError!i32 {
|
||||
\\ return null;
|
||||
\\}
|
||||
,
|
||||
".tmp_source.zig:5:34: error: expected 'NextError!i32', found 'OtherError!i32'",
|
||||
".tmp_source.zig:2:26: note: 'error.OutOfMemory' not a member of destination error set",
|
||||
);
|
||||
|
||||
cases.add(
|
||||
"invalid deref on switch target",
|
||||
\\comptime {
|
||||
|
Loading…
Reference in New Issue
Block a user